matplotlibのグラフをPythonのGUIツールであるtkinterに埋め込んで表示させる方法について整理しました。また、応用例としてtkinterのウィジェットで設定した値をグラフにをリアルタイムで連動させる方法も示します。
【スポンサーリンク】
グラフをtkinterへ埋め込む方法
matplotlibのグラフをtkinterへ埋め込むには、matplotlib.backends.backend_tkagg
からFigureCanvasTkAgg
をインポートする必要があります(以下に示す例の4行目)。グラフのツールバーの埋め込みも行っているので、同時にNavigationToolbar2Tk
もインポートしています。
How to set matplotlib graph into tkinter window
実行するとtkinterウィンドウ内にsin関数のグラフが表示され、その下にはツールバーも表示されます。
グラフへの埋め込み設定は、例の24~26行目で行っています。
canvas = FigureCanvasTkAgg(fig, root)
でグラフをtkinterに表示するためのオブジェクトを作成し、canvas.get_tk_widget().pack()
で表示させています。
今回はツールバーも表示させているので、グラフ表示前にtoolbar = NavigationToolbar2Tk(canvas, root)
でツールバーの設定を行っています。
【スポンサーリンク】
スケールとグラフをリアルタイムで連動
単純に tkinterでグラフを表示させるだけではなく、ウィジェット側から変数を変えたデータのグラフをリアルタイムで表示させたいケースが多くあります。以下の例では、Scaleウィジェットで関数のパラメータ(今回はsin関数の周波数)を調整し、その結果をグラフにリアルタイムで反映させる例を示します。
How to control matplotlib graph from tkinter
実行すると先ほどのグラフとともに、下にスケールが表示されます。スケールのスライダーを動かすと値に応じてグラフの表示が変化します。
この例では、スケールのスライダーを動かしたときに実行する関数(update_graph)内でスケールの現在値に応じてsin関数の周波数を変化させ、その後グラフの更新を行っています。
【スポンサーリンク】
subplotsを使用するときの注意事項
複数のグラフを表示させる際によく使用されるsubplots
ですが、ケアせず使用するとtkinterのウィンドウを閉じても、Pythonが実行され続けてコントロールが戻らない状態となります。
これは、subplots
の中でもtkinterのオブジェクトが作成されることが原因で、以下の様にメインループ内にclose
メソッドを記載することで、防止することができます。(21行目)
How to set matplotlib graph into tkinter window (…
【スポンサーリンク】