如何解决新图形未显示在 Canvas PySimpleGUI 和 Matplotlib 上
我需要根据两个按钮重置图表。按下按钮 1 时显示第一个图形,按下按钮 2 后不显示第二个图形。
代码如下:
import matplotlib.pyplot as plt
import matplotlib
import numpy
import numpy as np
import PySimpleGUI as psg
from matplotlib.backends.backend_tkagg import figureCanvasTkAgg
matplotlib.use('TkAgg')
def make_graph_and_put_on_canvas(x,y,xlabel,ylabel,graph_title,canvas):
figure,ax=plt.subplots()
ax.plot(x,y)
ax.set(xlabel=xlabel,ylabel=ylabel,title=graph_title)
ax.grid()
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
if __name__ == '__main__':
layout = [[psg.B("Button1"),psg.B("Button2")],[psg.Canvas(key="canvas")]]
Graph = psg.Window(title="Graph",layout=layout,size=(500,500))
while (True):
event,Value = Graph.read()
if event == psg.WINDOW_CLOSED:
Graph.close()
break
if event=="Button1":
#Make the first graph for y=2x
x=[0,1,2,3]
y=[0,4,6]
make_graph_and_put_on_canvas(x,"x","y","title",Graph["canvas"].TKCanvas)
if event=="Button2":
# Make the first graph for y=3x
x = [0,3]
y = [0,3,6,9]
make_graph_and_put_on_canvas(x,Graph["canvas"].TKCanvas)
解决方法
FigureCanvasTkAgg(figure,canvas)
将在 Graph["canvas"].TKCanvas
中创建一个新画布。
使用选项 side='top'
当 pack
时,您将获得从 Graph["canvas"].TKCanvas
的顶部到底部的新画布。第二个 Button
确实制作了第二个图表,但位于窗口底部,对于窗口中的 size = (500,500)
不可见。
- 如果你想在同一图上显示新图,请调用以下代码一次,
figure_canvas_agg = FigureCanvasTkAgg(figure,canvas)
figure_canvas_agg.get_tk_widget().pack(side='top',fill='both',expand=1)
- 清除图形或轴
clf() # clear figure
cla() # clear axis
- 在完成图形上的所有绘图后更新画布上的图形
figure_canvas_agg.draw()
以下代码只是工作,没有优化。
import matplotlib.pyplot as plt
import matplotlib
import numpy
import numpy as np
import PySimpleGUI as psg
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
matplotlib.use('TkAgg')
def make_graph_and_put_on_canvas(x,y,xlabel,ylabel,graph_title,canvas):
ax.cla()
ax.plot(x,y)
ax.set(xlabel=xlabel,ylabel=ylabel,title=graph_title)
ax.grid()
figure_canvas_agg.draw()
return figure_canvas_agg
if __name__ == '__main__':
layout = [[psg.B("Button1"),psg.B("Button2")],[psg.Canvas(key="canvas")]]
Graph = psg.Window(title="Graph",layout=layout,size=(500,500),finalize=True)
figure,ax = plt.subplots()
canvas = Graph["canvas"].Widget
figure_canvas_agg = FigureCanvasTkAgg(figure,canvas)
figure_canvas_agg.get_tk_widget().pack(side='top',expand=1)
while (True):
event,Value = Graph.read()
if event == psg.WINDOW_CLOSED:
break
if event=="Button1":
# Make the first graph for y=2x
x=[0,1,2,3]
y=[0,4,6]
make_graph_and_put_on_canvas(x,"x","y","title1",canvas)
if event=="Button2":
# Make the first graph for y=3x
x = [0,3]
y = [0,3,6,9]
make_graph_and_put_on_canvas(x,"title2",canvas)
Graph.close()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。