Q&A
matlpotlibのaxvspanを消す方法を知りたいです.
tkinterのcanvas上にmatplotlibのグラフを作成しました.
はじめに
ax.axvspan(1,2,color="red",alpha=0.2,lw=0)
ax.plot([1,2],[3,3])
の2つのグラフを作成しました.
このあと,ax.axvspan(1,2,color="red",alpha=0.2,lw=0)の方のグラフだけを消すようにしたいです.
やってみたこと
python
1import matplotlib.pyplot as plt 2from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg 3import tkinter as tk 4 5root=tk.Tk() 6 7fig = plt.figure() 8ax = fig.add_subplot() 9canvas=FigureCanvasTkAgg(fig, master = root) 10canvas.get_tk_widget().pack() 11ax.axvspan(1,2,color="red",alpha=0.2,lw=0) 12ax.plot([1,2],[3,3]) 13ax.clear() #axvspanの部分のグラフだけ消したいが,すべてのグラフが消えてしまう. 14canvas.draw() 15 16root.mainloop()
このコードでは2つとも消えてしまいます.ax[0].clear()で消えるかと試しましたがエラーになりました.
最終的にやりたいこと
最終的にはキーイベントと組み合わせてたいと思っています.右矢印→を押すとaxvspanが右に移り,[(1,2)から(3,4),(5,6)...のように],左矢印を押すと,左に移るようにしたいと考えています.
やりたいことがそれなりに再現できたコードを示しました.
ただ,このコードではax.clear()を使っているため,キーを押すたびにグラフがすべて消されてしまいます.
また,グローバル変数をできれば使わないで再現したい考えています.
python
1from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg 2import tkinter as tk 3import matplotlib.pyplot as plt 4 5a = -1 6b = 0 7def Click(event): 8 global a,b 9 if event.key == "right": 10 a += 2 11 b += 2 12 ax.clear() 13 ax.axvspan(a,b,color="red",alpha=0.2,lw=0) 14 plt.xlim(0, 10) 15 canvas.draw() 16 elif event.key=="left": 17 a -= 2 18 b -= 2 19 ax.clear() 20 ax.axvspan(a,b,color="red",alpha=0.2,lw=0) 21 plt.xlim(0, 10) 22 canvas.draw() 23 24root=tk.Tk() 25 26fig = plt.figure() 27ax = fig.add_subplot() 28canvas=FigureCanvasTkAgg(fig, master = root) 29fig.canvas.mpl_connect('key_press_event', Click) 30canvas.get_tk_widget().pack() 31 32root.mainloop() 33
回答2件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。