Bus errorとSegmentation faultに困ったら見るブログ

物理の研究者による日々の研究生活のメモ書きです ( python/emacs/html/Japascript/シェルスクリプト/TeX/Mac/C言語/Linux/git/tmux/R/ポケモンGO)

【python】点線の補助線と領域塗りつぶしをグラフに引きたい場合

点線の補助線

■ 参考 : 【Python@matplotlib】matplotlib にて横、縦の補助線を描く方法について

上の例では
fig, ax = plt.subplots(figsize=(5,5))
のようにaxとか書いてるけど、それしなくてもいけるっぽい

xdata = np.arange(0, 6.28, 0.1)
ydata = np.sin(xdata)
plt.figure(figsize=(10,6))
plt.plot(xdata, ydata)
plt.hlines(0.8, -0.8, 0.8, "blue", linestyles='dashed') # hlines
plt.vlines([2, 3], -0.8, 0.8, "red", linestyles='dashed') # vlines


使ってる関数の説明
plt.hlines(yvalue, xmin, xmax, "blue", linestyles='dashed')
って感じ
yvalueのところにx軸に平行な直線をxmin~xmaxまで引く

plt.vlinesはその逆で
plt.vlines(xvalue, ymin, ymax, "red", linestyles='dashed')
xvalueのところにy軸に平行な直線をymin~ymaxまで引く

1つの値xvalueの代わりに配列でも使える

プロット例

(追記)
この方法だと、始点と終点をどっちも指定する必要がある
それをしなくていい方法として、

■ 参考 : グラフに縦線・横線を引く方法【matplotlib】

# 水平線
matplotlib.pyplot.axhline(y=0, xmin=0, xmax=1)

# 垂直な線
matplotlib.pyplot.axvline(x=0, ymin=0, ymax=1)


xminとxmaxはオプションなので、
plt.axhline(y=2)とか書くだけで、直線が引ける
楽。




領域塗りつぶしプロット

■ 参考 : Fill between two vertical lines in matplotlib

xdata = np.arange(0, 6.28, 0.1)
ydata = np.sin(xdata)
plt.figure(figsize=(10,6))
plt.plot(xdata, ydata)
plt.axvspan(2, 4, alpha=0.2, color="red")

使ってる関数の説明
plt.axvspan(xmin, xmax, alpha=0.2, color="red")

xmin~xmaxに帯を置く
(ここからオプション)
alphaを設定しないと、塗りつぶしなしの帯になる
colorで色を選択できる
他にも
plt.axvspan(xmin, xmax, ymin=0, ymax=1, alpha=0.2, color="red")
みたいにyの範囲を追加することもできる

プロット例



(追記)

ヒストグラムにこの点線を引くときは、予めヒストグラムの最大値と最小値を知っていないと点線の範囲をきちんと指定できない

ヒストグラムの最小値と最大値を取得して、それを点線の範囲に代入してやればいい

■ 参考 : Python+Matplotlibでグラフに対して追加で縦線や横線を書く話

v = plt.hist(plist, bins=40, range=(0, 1), color="green")
plt.vlines(0.05, 0, [v[0].max()+2], color="orange", linestyles='dashed')

みたいな感じ


ランキング参加中です

↓クリックしていただけると嬉しいです〜