Matplotlib で複数の行の間を塗りつぶす方法
    
    Suraj Joshi
    2024年2月15日
    
    Matplotlib
    Matplotlib Lines
    
 
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 座標を表します。
        チュートリアルを楽しんでいますか? <a href="https://www.youtube.com/@delftstack/?sub_confirmation=1" style="color: #a94442; font-weight: bold; text-decoration: underline;">DelftStackをチャンネル登録</a> して、高品質な動画ガイドをさらに制作するためのサポートをお願いします。 Subscribe
    
著者: Suraj Joshi
    Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn