質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Q&A

解決済

3回答

8148閲覧

Tkinterでグラフを描画して、ボタンをクリックする度にグラフを更新する

Yhaya

総合スコア439

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

0グッド

0クリップ

投稿2017/11/23 10:10

#解決したい問題
以下のグラフ描写関数をThinterで作成したボタンに.bindで結び付けて実行しています。

Python

1import matplotlib 2matplotlib.use('TkAgg') 3 4from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg 5 6from matplotlib.figure import Figure 7 8import tkinter as Tk 9 10def Make_graphs(event): 11 result = Calc() #具体的な計算 12 f = result[1] #x軸 13 sigre = result[2] #y軸1 14 sigim = result[3] #y軸2 15 sigabs = result[4] #y軸3 16 17 F = Figure(figsize=(10, 3), dpi=100) 18 re = F.add_subplot(131) 19 re.plot(f, sigre, "r") 20 21 im = F.add_subplot(132) 22 im.plot(f, sigim, "b") 23 24 abso = F.add_subplot(133) 25 abso.plot(f, sigabs, "r") 26 27 canvas = FigureCanvasTkAgg(F, master=root) 28 canvas.show() 29 canvas.get_tk_widget().pack(side=Tk.BOTTOM, expand=0) 30 31 canvas._tkcanvas.pack(side=Tk.BOTTOM, expand=0)

しかしこの関数では計算に使うパラメーターを変えて再実行したときに前のグラフが消えず、前のグラフの上側に新しいグラフが書かれてしまいます。計算を再実行したときに前のグラフを消去して、同じ場所に新しいグラフを作成するにはどのようにすればいいでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

canvas.deleteで前のcanvasでの描画を削除すればよいかと思います。
どのように前のcanvasを取得するかは、記載されたコードからすぐには分かりませんでした。

投稿2017/11/23 10:26

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Hi, t clear the previous graph and create a new graph in the same place, you can modify the Make_graphs function as follows bloxd io:

Python def Make_graphs(event): # Clear the previous graph for widget in root.winfo_children(): if isinstance(widget, FigureCanvasTkAgg): widget.get_tk_widget().destroy() widget._tkcanvas.pack_forget() ini Copy # Perform the calculation result = Calc() #具体的な計算 f = result[1] #x軸 sigre = result[2] #y軸1 sigim = result[3] #y軸2 sigabs = result[4] #y軸3 # Create the new graph F = Figure(figsize=(10, 3), dpi=100) re = F.add_subplot(131) re.plot(f, sigre, "r") im = F.add_subplot(132) im.plot(f, sigim, "b") abso = F.add_subplot(133) abso.plot(f, sigabs, "r") # Create a new canvas for the new graph and pack it into the window canvas = FigureCanvasTkAgg(F, master=root) canvas.show() canvas.get_tk_widget().pack(side=Tk.BOTTOM, expand=0) canvas._tkcanvas.pack(side=Tk.BOTTOM, expand=0)

The modified function first clears the previous graph by destroying the existing FigureCanvasTkAgg widget and using the pack_forget method to remove it from the window. Then, it performs the calculation and creates a new graph as before. Finally, it creates a new FigureCanvasTkAgg widget for the new graph and packs it into the window.

This way, when the function is re-executed with new calculation parameters, it will clear the previous graph and create a new one in the same place.

投稿2023/07/12 04:08

stevenbartsch

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

ボタンを押す(Make_graphsを呼ぶ)毎に、canvas(figure)を生成するのではなく、最初に1度だけ生成するようにして、ボタンを押したときはGraphだけを更新するようにすると良いのではないでしょうか。

Python

1import matplotlib 2matplotlib.use('TkAgg') 3 4from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg 5 6from matplotlib.figure import Figure 7 8import tkinter as Tk 9 10root = Tk.Tk() 11 12# Canvasを生成 13F = Figure(figsize=(10, 3), dpi=100) 14re = F.add_subplot(131) 15im = F.add_subplot(132) 16abso = F.add_subplot(133) 17canvas = FigureCanvasTkAgg(F, master=root) 18canvas.get_tk_widget().pack(side=Tk.BOTTOM, expand=0) 19canvas._tkcanvas.pack(side=Tk.BOTTOM, expand=0) 20 21def Make_graphs(): 22 result = Calc() #具体的な計算 23 f = result[1] #x軸 24 sigre = result[2] #y軸1 25 sigim = result[3] #y軸2 26 sigabs = result[4] #y軸3 27 28 # データをClear 29 re.cla() 30 im.cla() 31 abso.cla() 32 33 re.plot(f, sigre, "r") 34 im.plot(f, sigim, "b") 35 abso.plot(f, sigabs, "r") 36 canvas.show() 37 38 39Make_graphs() # グラフ描画 40bt = Tk.Button(root, text='UPDATE', command=Make_graphs) 41bt.pack() 42root.mainloop()

投稿2017/11/24 00:41

magichan

総合スコア15898

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問