HOWTO · Matplotlib
Matplotlib で複数の行の間を塗りつぶす方法
fill_between()は 2 行の間の領域を一度に塗りつぶすだけですが、1 組の行を選択して複数の行の間を塗りつぶすこともできます。
このページの内容
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 座標を表します。