matplotlib只绘制一次

时间:2010-04-28 20:19:43

标签: wxpython matplotlib

我遇到了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.linesplot()调用,并保留之前的所有内容。

出于某种原因,它只能在我第一次调用它时才能从类的 init 中调用它,因为如果我在draw()调用> init 它将完美地绘制它们。

如果我再次致电draw(),为什么不能正常工作?

2 个答案:

答案 0 :(得分:2)

在你自己的draw()方法结束时,你应该调用

self.canvas.draw()

告诉画布它现在必须更新屏幕。否则它将在下一个绘制事件中执行此操作(由您提到的那个可怕的黑客引起)。

答案 1 :(得分:-1)

对于有同样问题的人

我用一点“黑客”来解决它

我在主窗口中创建了一个破坏graphpanel的函数,删除了它的值(del graphpanel),然后创建一个新函数,并向它发送一个包含曲线数据的字典。

然后我“摇动”窗口(我已经制作了另一个函数,将其大小增加1px,然后将其恢复正常,强制执行evt_size事件)以使图形面板调整大小(否则它将是一个很小的窗户顶部的正方形。