matplotlibで領域の図示
matplotlibで領域に色を付けてみたのでメモ。
fill_between関数fill関数を使うと大体できます。
sin(x)とcos(x)の間の領域に色を付ける。
まずはsin(x)とcos(x)の間に色を付けてみます。
fill_betweenは3つの変数を取ります。
x: x軸の範囲指定
y1,y2: この2つの間を塗りつぶす
あとはオプションでfacecolorは色、alphaは透過度なんかを指定できます。
import numpy as np import matplotlib.pyplot as plt from math import * x = np.arange(0,10,0.01) y1 = np.sin(x) y2 = np.cos(x) plt.fill_between(x,y1,y2,facecolor='y',alpha=0.5) plt.show()
条件を指定して図示
図示の条件がついた場合は少し面倒になります。
1条件の場合(y1>y2)などでいい場合はオプションwhere=y1>y2で追加すればいいですが、2条件(y1>y2 かつ xの範囲指定)になるとwhereでは書けません。
下のコードではグラフを書く部分と色を塗る部分を完全に分けています。
import numpy as np import matplotlib.pyplot as plt from math import * x = np.arange(0,10,0.01) y1 = np.sin(x) y2 = np.cos(x) plt.plot(x,y1,color="k") plt.plot(x,y2,color="k") x1 = np.arange(0,5,0.01) z1 = np.sin(x1) z2 = np.cos(x1) plt.fill_between(x1,z1,z2,where=z1>z2,facecolor='y',alpha=0.5) plt.show()
さらに複雑な場合
3つ以上の関数で領域に色を塗る場合にはminimum関数やmaximum関数を使います。(minimum,maximumの使用は(from pylab import *)が必要です。
\[y > 5x,\ \ y < x,\ \ y < -x^2 + 5\]
この条件を満たす領域に色を塗ってみます。
import numpy as np import matplotlib.pyplot as plt from math import * from pylab import * x1 = np.arange(0, 2, 0.001) y2 = - x1 ** 2 + 5 y3 = x1 y4 = 5 * x1 y5 = minimum(y2,y4) plt.fill_between(x1,y3,y5,where=y5>y3,facecolor='y',alpha=0.5) plt.plot(x1,y2,color="k") plt.plot(x1,y3,color="k") plt.plot(x1,y4,color="k") plt.show()
ちょっとごちゃごちゃしてますがこんな感じでしょうか。
おまけ
座標が分かっていてその内部を塗りつぶす場合はfill関数が楽です。長方形を図示したいような場合はこっちがいいです。
例(1,0),(2,0.3),(2,1),(1.4,0.7),(1,1)の内部の塗りつぶし。
import matplotlib.pyplot as plt testx = [1,2,2,1.4,1] testy = [0,0.3,1,0.7,1] plt.fill(testx,testy,color="y",alpha=0.5) plt.show()