我遇到了matplotlib的问题,它在我第一次运行我为它制作的draw()
函数时只绘制了一条线。我的代码是这样的:
我有graphPanel.py :(剥离到必需品)
class GraphPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
self.figure = Figure()
self.canvas = FigureCanvasWxAgg(self, -1, self.figure)
self.draw()
def draw(self, curves={}): #This creates the axis and
if not hasattr(self, "ax"): #plots all the lines in the curve dictionary
self.ax = self.figure.add_subplot(111)
self.ax.lines = []
for name, props in zip(curves.keys(), curves.values()):
x, y, col = props
line = self.ax.plot(x, y, color=col, lw=3)
Main.py文件包含嵌入了graphpanel的整个界面,以及一个应该调用面板的draw()函数的函数,给它一个包含一组曲线的字典。
问题是,当我这样做时,它将完全忽略被清空的列表self.ax.lines
和plot()
调用,并保留之前的所有内容。
出于某种原因,它只能在我第一次调用它时才能从类的 init 中调用它,因为如果我在draw()调用> init 它将完美地绘制它们。
如果我再次致电draw()
,为什么不能正常工作?
答案 0 :(得分:2)
在你自己的draw()方法结束时,你应该调用
self.canvas.draw()
告诉画布它现在必须更新屏幕。否则它将在下一个绘制事件中执行此操作(由您提到的那个可怕的黑客引起)。
答案 1 :(得分:-1)
对于有同样问题的人
我用一点“黑客”来解决它
我在主窗口中创建了一个破坏graphpanel的函数,删除了它的值(del graphpanel),然后创建一个新函数,并向它发送一个包含曲线数据的字典。
然后我“摇动”窗口(我已经制作了另一个函数,将其大小增加1px,然后将其恢复正常,强制执行evt_size事件)以使图形面板调整大小(否则它将是一个很小的窗户顶部的正方形。