我知道网上有很多问题,但不幸的是,没有人对此有所帮助。我的相关matplotlib导入是:
import matplotlib
matplotlib.use("TkAgg")
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
以下是我打电话给新剧情的方法:
self.myFig1 = Figure(figsize = (10, 4), tight_layout = True)
self.myPlot1 = self.myFig1.add_subplot(111)
self.myPlot1.plot([blah],[blah])
canvas1 = FigureCanvasTkAgg(self.myFig1, self.myFrame)
canvas1.show()
canvas1.get_tk_widget().grid()
我有一个刷新按钮,一直在调用最终创建这个图的功能,但是我需要一个嵌入式图,每次点击按钮后都会更新,而不是重新创建。我尝试过像Figure.close(), Figure.clf()
这样的东西但没有效果。我很感激你的帮助。
其他信息:它一直在创建一个新情节的原因是因为我一遍又一遍地重复它。所以我删除了代码的.grid()部分,我尝试了下面这样的东西,但是没有用:
self.myFig1.clf()
self.myFig1 = Figure(figsize = (10, 4), tight_layout = True)
self.myPlot1 = self.myFig1.add_subplot(111)
self.myPlot1.plot([blah],[blah])
canvas1 = FigureCanvasTkAgg(self.myFig1, self.myFrame)
canvas1.draw()
这只是破坏了人物,画布,一切,并没有绘制任何东西。
答案 0 :(得分:1)
self.myFig.clear()
self.myPlot = self.myFig.add_subplot(111, **self.nadalkwArgs)
self.myPlot.plot([series1], [series2])
self.myFig.canvas.draw()
是什么解决了我的问题。你的刷新情节"按钮或方法应该有这个以保持画布,清除旧的情节,制作新的情节并保留情节样式元素,如xlabel,ylabel等。所以基本上,首先你清除图(不是subplot,self.myPlot.clear()会清除情节,但你不能用你的kwargs那样),然后你用kwargs重新创建子图,然后你绘图,最后你.canvas.draw( )
答案 1 :(得分:0)
无需重新创建新的画布或无花果。 将FigureCanvasTkAgg网格化之后,您只能通过以下方式重置按钮回调中的行:
self.myPlot1.set_data(xdata,ydata)
self.myFig.canvas.draw()