代码之家  ›  专栏  ›  技术社区  ›  kettlepot

Matplotlib绘图仅一次

  •  0
  • kettlepot  · 技术社区  · 15 年前

    我对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() 打电话,一切照旧。

    出于某种原因,它只在我第一次调用它时起作用,从 初始化 因为如果我把一本字典放在 () 呼叫进入 初始化 它将完美地描绘它们。

    如果我打电话为什么不行 () 又一次?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Ber    15 年前

    在您自己的draw()方法的末尾,应该调用

    self.canvas.draw()
    

    要告诉画布,它必须立即更新屏幕。否则,它会在下一个平局事件中这样做(这是你提到的可怕的黑客行为造成的)。

        2
  •  -1
  •   kettlepot    15 年前

    对于有同样问题的人

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

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

    然后我“摇晃”窗口(我做了另一个函数,它将其大小增加1倍,然后将其恢复正常,以强制执行evt_大小事件),以调整图形面板的大小(否则它将是窗口顶部的一个小正方形)。