読者です 読者をやめる 読者になる 読者になる

HoppeSoft

やわらかコーディング

matplotlibで線を部分的に消す

表題の通り、線を部分的に消したかったんだけど
単純だからかググっても引っかからなかったのでメモ

例えば以下のコード

import numpy as np
import matplotlib.pyplot as plt

x=np.array([-3, -2, -1, 1, 2, 3])
y=np.sin(x)

plt.plot(x,y)

で出力される下図のようなグラフ
f:id:titets38:20170119134406p:plain

で、x=0の時の数値は実際出してないが
(当たり前だけど)x=-1と1の点をつないで表示する

ここで、x=0のときのyの値は実際には出ていないから消したい場合
(例えば実験で観測できなかった部分があるとか)
単純に以下のようにする

import numpy as np
import matplotlib.pyplot as plt

x=np.array([-3, -2, -1, 1, 2, 3])
y=np.sin(x)

plt.plot(x[0:3],y[0:3],'b')
plt.plot(x[3:],y[3:],'b')

x[0],y[0]から3点分だけ描画し、追加でx[3],y[3]から先を描画している
また色が自動で変わってしまうので両方青色を指定した
f:id:titets38:20170119140918p:plain

  • 凡例をつける場合

凡例などつけるときはどちらかのプロットにだけラベルをつけるのがいい
両方につけると同じ凡例が2つ表示されてしまう

plt.plot(x[0:3],y[0:3],'b',label="sin")
plt.plot(x[3:],y[3:],'b',label="sin")
plt.legend(loc='lower right')

f:id:titets38:20170119141525p:plain
片方にすると

plt.plot(x[0:3],y[0:3],'b',label="sin")
plt.plot(x[3:],y[3:],'b')
plt.legend(loc='lower right')

f:id:titets38:20170119141654p:plain