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

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

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

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

Python 3.x

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

Tkinter

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

903閲覧

pythonを使ってアニメーションで動くグラフをGUIに埋め込みたい

sato0401

総合スコア2

Matplotlib

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

Python 3.x

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

Tkinter

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/11/10 14:43

編集2023/11/10 15:30

実現したいこと

pythonを使ってアニメーションで動くグラフをGUIに埋め込みたいです

前提

pythonでRUNボタンを押すとアニメーションで動くグラフが出力されるアプリケーションのようなものを作成しています。

発生している問題・エラーメッセージ

最終的にな結果(アニメーションが終了したときのグラフ)が静止画で出力されるのですが、肝心のアニメーションが全く出力されません。

### 該当のソースコード ```python import tkinter as tk import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg def graph(): x = [1,2,3,4,5,6,7,8,9,10] y = [1,8,3,6,5,4,7,3,2,10] fig = plt.Figure(figsize=(5,4)) instance=fig.subplots() instance.set_title("グラフ", fontname="MS Gothic") instance.set_xlabel("x軸", fontname="MS Gothic") instance.set_ylabel("y軸", fontname="MS Gothic") for i in range(1,10,1): instance.plot(x[:i],y[:i]) plt.pause(1) return fig def btn_click(): canvas = FigureCanvasTkAgg(graph(), master=root) canvas.get_tk_widget().pack() root=tk.Tk() root.geometry("700x400") #ボタンウィジェットの配置 btn1=tk.Button(root,text="RUN",command=btn_click) btn1.pack() root.mainloop()

試したこと

GUIに埋め込みをせず、アニメーションの部分だけでプログラムを実行すると動作が確認できました。
最終的には機械学習など様々なプログラムを組み合わせたいと思っており、私なりに簡素化したのでどなたかご教授いただければ幸いです。
また、色々と調べましたがplt.pause()を使ったアニメーションとtkinterは相性が悪いのでしょうか?その点もご教授いただければ幸いです。

補足情報(FW/ツールのバージョンなど)

python 3.8
spyder

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

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

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

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

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

guest

回答1

0

ベストアンサー

matplotlib.animation.FuncAnimation — Matplotlib 3.8.1 documentation を使います。

python

1import tkinter as tk 2import matplotlib.pyplot as plt 3import matplotlib.animation as ani 4from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg 5 6def update_graph(frame): 7 return ax.plot(x[:frame], y[:frame]) 8 9def start_animation(): 10 global anim 11 anim = ani.FuncAnimation(fig, update_graph, interval=1000, 12 frames=range(2, len(x)+1), repeat=False, 13 init_func=lambda: [l.remove() for l in ax.lines]) 14 canvas.draw_idle() 15 16if __name__ == '__main__': 17 root=tk.Tk() 18 root.geometry("700x400") 19 20 #ボタンウィジェットの配置 21 btn1=tk.Button(root,text="RUN",command=start_animation) 22 btn1.pack() 23 24 # data to plot 25 x = [1,2,3,4,5,6,7,8,9,10] 26 y = [1,8,3,6,5,4,7,3,2,10] 27 28 #描画の用意 29 fig, ax = plt.subplots(figsize=(5,4)) 30 ax.set_title("グラフ", fontname="MS Gothic") 31 ax.set_xlabel("x軸", fontname="MS Gothic") 32 ax.set_ylabel("y軸", fontname="MS Gothic") 33 ax.set_xlim(min(x)-1, max(x)+1) 34 ax.set_ylim(min(y)-1, max(y)+1) 35 36 #canvas widget 37 canvas = FigureCanvasTkAgg(fig, master=root) 38 canvas.get_tk_widget().pack(fill=tk.BOTH, expand=1) 39 40 root.mainloop()

イメージ説明

投稿2023/11/10 18:12

melian

総合スコア21118

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

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

sato0401

2023/11/11 01:07

目指していた動きが実現できました、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問