我在結合wxPython和matplotlib的應用程序上苦苦掙扎。wxpython面板中的matplotlib動畫
我想在wxPanel中嵌入一個動畫matplotlib對象。數據應該在運行時添加。
我的模塊代碼:
(我不能得到正確的格式,見http://pastebin.com/PU5QFEzG)
'''
a panel to display a given set of data in a wxframe as a heatmap, using pcolor
from the matplotlib
@author: me
'''
import wx
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas #todo: OW 26.10.15 needed?
class plotPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
self.figure = plt.Figure()
self.subplot = self.figure.add_subplot(111)
plt.title('test')
self.canvas = FigureCanvas(self, -1, self.figure) #ToDo: OW 26.10.15 Verstehen
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.GROW)
self.SetSizer(self.sizer)
self.Fit()
self.dataSet = []
self.animator = animation.FuncAnimation(self.figure,self.anim, interval=1000)
def anim(self, a):
if(len(self.dataSet) == 0):
return 0
i = a % len(self.dataSet)
obj = self.subplot.pcolor(self.dataSet[i], cmap='RdBu')
return obj
def add_data(self, data):
self.dataSet.append(data)
#
# Code for a standalone test run
#
class TestFrame(wx.Frame):
def __init__(self,parent,title):
wx.Frame.__init__(self,parent,title=title,size=(1000,1000))
self.statusbar = self.CreateStatusBar()
self.statusbar.SetStatusText('Status Bar')
if __name__ == '__main__':
from numpy.random import rand #todo: OW 26.10.15 remove
app = wx.App(redirect=False)
frame = TestFrame(None, 'Debug Frame')
panel = plotPanel(frame)
frame.Show()
C = rand(10,10)
panel.add_data(C)
C = rand(10,10)
panel.add_data(C)
C = rand(10,10)
panel.add_data(C)
app.MainLoop()
林現在struggeling上增加更多詳細信息以圖形,如彩條或標題。
如果我在anim_Fkt中添加self.subplot.title = 'test'
,我會得到''str'對象沒有'get_animated'屬性。如果我嘗試plt.title('test')
,則不起作用。 什麼是添加標題或顏色條或圖例的正確方法?
謝謝,在兩者之間我通過很多嘗試和錯誤循環來解決它:我對名稱感到困惑(爲什麼我使用'add_SUBPLOT'來添加名爲'axes'的東西?)。我在「axes」文檔中找到了'set_title'(與「axis」不一樣,對於非本地英語讀者而言,這很困惑)。我還發現'update_normal()',只要你不更改'pcolor' /'pcolormesh'的'vmin' /'vmax',它就會工作。如果您更改範圍或色彩集,則需要'update_bruteforce()'使其更新色彩條。但感謝您的幫助,將其標記爲解決方案:) – xavor