計算物理屋の研究備忘録

Linux, Cygwin, Mac, zsh, emacs等の使い方、設定などのメモ

matplotlibでグラフの線を消す

目次

とりあえず消す方法

2本の線を書く。

In [1]: plt.plot([1,2,3])
Out[1]: [<matplotlib.lines.Line2D at 0x6fffdde8a50>]

In [2]: plt.plot([2,4,6])
Out[2]: [<matplotlib.lines.Line2D at 0x6fffd705790>]

current axesの線の確認はplt.gca().linesというコマンドでできる。

In [5]: plt.gca().lines
Out[5]:
[<matplotlib.lines.Line2D at 0x6fffdde8a50>,
 <matplotlib.lines.Line2D at 0x6fffd705790>]

2本の線があるのが確認できる。リスト形式なのでpopで削除できる。後に描いた線を消すには

In [6]: plt.gca().lines.pop(1)
Out[6]: <matplotlib.lines.Line2D at 0x6fffd705790>

塗りつぶし

fill_between()で塗りつぶしを作ると''lines''ではなく''colections''になる。
線の時と同様に削除できる

In [39]: plt.fill_between([1,2,3], [4,5,6])
Out[39]: <matplotlib.collections.PolyCollection at 0x6fffd0e3490>

In [40]: plt.fill_between([1,2,3], [5,5,5])
Out[40]: <matplotlib.collections.PolyCollection at 0x6fffd0e3910>

In [41]: plt.gca().collections
Out[41]:
[<matplotlib.collections.PolyCollection at 0x6fffd0e3490>,
 <matplotlib.collections.PolyCollection at 0x6fffd0e3910>]

In [42]: plt.gca().collections[0].remove()

popでもremoveでも削除できる。

しっかり管理する方法

上の方法では線がいくつもあるとどれがどれだかわからない。線を描くときに名前をつけたほうがいい。

In [1]: line1, = plt.plot([1,3,5])

In [2]: line1
Out[2]: <matplotlib.lines.Line2D at 0x6fffdb67990>

こうすれば線の名前を指定した上でremoveで簡単に消せる

In [3]: line1.remove()

注意点としてはline1, =のようにコンマをつけること。
pythonでは a, b = 1, 2のようにコンマで区切ってaに一つ目、bに二つ目の要素を代入できる。line1, =は一つ目の要素を代入している。なぜならplt.plot()はリスト形式だから。

コンマを付けないと下記のようにリスト形式になってしまうので

In [7]: line2 = plt.plot([2,4,6])

In [8]: line2?
Type:        list
String form: [<matplotlib.lines.Line2D object at 0x6fffccd2650>]
Length:      1
Docstring:
list() -> new empty list
list(iterable) -> new list initialized from iterable's items

リスト形式だとわかっていれば、同様に削除はできる

In [13]: line2[0].remove()

塗りつぶし

fill_between()で作成されるPolyCollection objectはリスト形式ではないので上で書いたコンマを使うやり方はエラーがでる。普通に名前をつけて代入すればいい

In [45]: collec1 = plt.fill_between([1,2,3], [4,5,6])

In [46]: collec1.remove()