Matplotlib で複数の行の間を塗りつぶす方法
Suraj Joshi
2024年2月15日
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()
出力:
図では、以下の条件を満たすようにポリゴンを塗りつぶす必要があります。
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()
出力:
上の与えられた条件を満たすために, 最初のステップとして y >= 0
となるように 0
から 10
の間に y 軸の限界を設定する:
y=6-x
と y=8-4x
の線が交わるので、y=8-4x
と y=6-x
がともに満たされるように、minimum()
メソッドを用いて 2つの条件に従う点を選択します。
最後に、y1
と y4
の間の領域を塗りつぶすことで、条件で指定されたポリゴン領域が得られます。
あるいは、領域の角点となる直線の交点を求めることもできます。隅点が分かれば、matplotlib.pyplot.fill()
メソッドを用いてポリゴンを塗りつぶすことができます。
import matplotlib.pyplot as plt
x = [2, 4, 2, 0]
y = [4, 2, 0, 2]
plt.fill(x, y)
plt.show()
出力:
このメソッドはポリゴンの角点を (2,4)
、(4,2)
、(2,0)
、(0,2)
で塗りつぶす。
リスト x
は多角形の角点の x 座標を、y
は多角形の角点の y 座標を表します。
著者: Suraj Joshi
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn