2010-04-28 71 views
0

我遇到了一個matplotlib問題,它在我第一次運行draw()函數時只繪製了一條線。我的代碼是這樣的:matplotlib只能重繪一次

我有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) 

幷包含在graphpanel嵌入整個界面,具有功能沿Main.py文件應該調用面板的draw()函數,併爲其提供包含一組曲線的字典。 問題是,當我這樣做時,它將完全忽略被清空的列表self.ax.linesplot()調用並保持以前的狀態。

出於某種原因,它只能我第一次稱呼它,從類的初始化,因爲如果我在draw()呼叫置於初始化把字典,點,它會完全繪製出來。

如果我再撥打draw(),爲什麼不工作?

回答

2

在你自己的draw()方法的最後,你應該叫

self.canvas.draw() 

告訴它現在更新屏幕畫布上,否則它會做所以在下一次抽獎活動中(您提到的那個可怕的黑客事件導致的)。

-1

對於我同樣的問題,人們

我一點點解決它「黑客」

我在那個破壞graphpanel主窗口的功能,刪除其值(德爾graphpanel),然後創建一個新的,給它發送一個包含曲線數據的字典。

然後我「搖動」窗口(我做了另一個函數,它的大小增加了1px,然後恢復正常,強制執行一個evt_size事件)來調整graphpanel的大小(否則它會是一個在窗口頂部的小廣場。