Matplotlib で複数の行の間を塗りつぶす方法

Suraj Joshi 2024年2月15日
Matplotlib で複数の行の間を塗りつぶす方法

Matplotlib の matplotlib.pyplot.fill_between() メソッドを用いて複数行の間を塗りつぶすことができます。関数 fill_between() は 2 本の線の間を一度に塗りつぶしますが、1 組の線を選択して複数の線の間を塗りつぶすこともできます。

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 5, 0.02)

y1 = 8 - 4 * x
y2 = 6 - x
y3 = 2 - 2 * x

plt.plot(x, y1, color="red", label="8-4x")
plt.plot(x, y2, color="blue", label="6-x")
plt.plot(x, y3, color="green", label="2-2x")
plt.legend()
plt.show()

出力:

事前条件複数行間の塗りつぶし Matplotlib

図では、以下の条件を満たすようにポリゴンを塗りつぶす必要があります。

y <= 8- 4x
y <= 6 - x
y >= 2 - 2x
y >= 0

Matplotlib での複数の線の間の塗りつぶし

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 5, 0.02)

y1 = 2 - 2 * x
y2 = 6 - x
y3 = 8 - 4 * x

y4 = np.minimum(y2, y3)

plt.plot(x, y1, color="red", label="2-2x")
plt.plot(x, y2, color="blue", label="6-x")
plt.plot(x, y3, color="green", label="8-4x")
plt.ylim(0, 10)
plt.fill_between(x, y1, y4, color="yellow")
plt.legend()
plt.show()

出力:

複数行間の塗りつぶし Matplotlib

上の与えられた条件を満たすために, 最初のステップとして y >= 0 となるように 0 から 10 の間に y 軸の限界を設定する:

y=6-xy=8-4x の線が交わるので、y=8-4xy=6-x がともに満たされるように、minimum() メソッドを用いて 2つの条件に従う点を選択します。

最後に、y1y4 の間の領域を塗りつぶすことで、条件で指定されたポリゴン領域が得られます。

あるいは、領域の角点となる直線の交点を求めることもできます。隅点が分かれば、matplotlib.pyplot.fill() メソッドを用いてポリゴンを塗りつぶすことができます。

import matplotlib.pyplot as plt

x = [2, 4, 2, 0]
y = [4, 2, 0, 2]

plt.fill(x, y)
plt.show()

出力:

fill メソッドを使って角点を持つ多角形をプロットしてみましょう

このメソッドはポリゴンの角点を (2,4)(4,2)(2,0)(0,2) で塗りつぶす。

リスト x は多角形の角点の x 座標を、y は多角形の角点の y 座標を表します。

著者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

関連記事 - Matplotlib Lines