GUI内にMatplotlibのグラフを表示する(sg.Canvasを使用)
pysimpleguiというライブラリを使用すると、簡単にGUIを作成できます。
matplotlibを用いて、グラフを表示する場合にGUI内にグラフを表示しようとする場合、
2つの方法があるようなので、それぞれについて紹介させていただきます。
まず、第一の手法がpysimpleguiライブラリの”canvas”を用いる方法。
この場合、15行目の”sg.Canvas”
import numpy as np
import PySimpleGUI as sg
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
# 描画用の関数
def draw_figure(canvas, figure):
figure_canvas_agg = FigureCanvasTkAgg(figure, canvas)
figure_canvas_agg.draw()
figure_canvas_agg.get_tk_widget().pack(side='top', fill='both', expand=1)
return figure_canvas_agg
# レイアウト作成
layout = [[sg.Text('Plot on Canvas Sample')],
[sg.Canvas(size=(640,200),key='-CANVAS-')]]
# windowを作成する.finalize=Trueにする必要がある.
window = sg.Window('Demo Application - Plot on Canvas Sample', layout, finalize=True, element_justification='center', font='Monospace 12')
# 埋め込み用のfigを作成する.
fig = plt.figure(figsize=(6, 3))
ax = fig.add_subplot(111)
ax.set_ylim(-2, 2)
# figとCanvasを関連付ける.
fig_agg = draw_figure(window['-CANVAS-'].TKCanvas, fig)
# 適当なプロット用データ作成
x = np.linspace(1,10)
y = np.sin(x)
# プロット
ax.plot(x, y)
# 変更を加えたあと,fig_agg.draw()で変更を反映させる.
fig_agg.draw()
# イベントループ
while True:
event, values = window.read()
if event in (None, "Cancel"):
break
elif event == "Clear":
ax.cla()
fig_agg.draw()
# ウィンドウを閉じる.
window.close()
上記のコードで、下記の通りGUI内にmatplotlibによるグラフが描画されます。
最近のコメント