2012-05-25 13 views
2

我想在每個draw()操作上繪製一個新圖。我拼湊在一起code用於繪製一個靜態圖,這是從未更新創建對象後。但是我想要在提供新數據時能夠重繪如何重繪wxpython面板中的mathplotlib圖形?

如何構建我的代碼來完成可重繪數字?


這裏是有問題的代碼,繪製恰好一次:

from numpy import arange, sin, pi 
import matplotlib 
matplotlib.use('WXAgg') 

from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas 
from matplotlib.backends.backend_wx import NavigationToolbar2Wx 

class CanvasPanel(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent) 
     #self.size = (800, 50) 
     self.figure = Figure() 
     self.figure.set_size_inches((8,1)) 
     self.figure.set_dpi(80) 
     #self.axes = self.figure.add_subplot(111) 
     self.canvas = FigureCanvas(self, -1, self.figure) 
     self.sizer = wx.BoxSizer(wx.VERTICAL) 
     self.sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.GROW) 
     self.SetSizer(self.sizer) 
     self.Fit() 

    def draw(self): 
     self.axes = self.figure.add_subplot(111) 
     t = arange(0.0, 3.0, 0.01) 
     s = sin(2 * pi * t) 
     self.axes.plot(t, s) 
     #time.sleep(5) 
     #self.figure.clear() 
+0

你試圖重繪? –

+0

我不知道如何實際進行 – aitchnyu

+0

我不熟悉matplotlib,但如果你的問題只是你添加的新圖不顯示,FigueCanvas是否有某種類型的Refresh()方法?你有沒有試過調用它?如果沒有,你是否嘗試添加新圖後刷新面板(self.Refresh())?也許self.Layout()也可以工作(如果Layout()確實有幫助,我建議將「self.SetAutoLayout(True)」指定給init)。 – acattle

回答

2

由於@acattle在他的評論中建議,所有你需要做的就是將這些行添加到您的繪圖子程序,以後你更新你的陰謀:

self.canvas.draw() 
self.canvas.Refresh()