Python Code Notes

Information by python engineer

【matplotlib】グラフをtkinterの画面に埋め込む方法【Python】

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関数のグラフが表示され、その下にはツールバーも表示されます。

グラフをtkinterに埋め込み

グラフへの埋め込み設定は、例の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

実行すると先ほどのグラフとともに、下にスケールが表示されます。スケールのスライダーを動かすと値に応じてグラフの表示が変化します。

scaleを用いてグラフを調整

この例では、スケールのスライダーを動かしたときに実行する関数(update_graph)内でスケールの現在値に応じてsin関数の周波数を変化させ、その後グラフの更新を行っています。

[↑ 目次へ]


【スポンサーリンク】


subplotsを使用するときの注意事項

複数のグラフを表示させる際によく使用されるsubplotsですが、ケアせず使用するとtkinterのウィンドウを閉じても、Pythonが実行され続けてコントロールが戻らない状態となります。

これは、subplotsの中でもtkinterのオブジェクトが作成されることが原因で、以下の様にメインループ内にcloseメソッドを記載することで、防止することができます。(21行目)

How to set matplotlib graph into tkinter window (…

[↑ 目次へ]


【スポンサーリンク】