Matplotlib 和 WxPython - Interactive Toolbar Plot 在点击时不执行 Refresh/Update
Matplotlib and WxPython - Interactive Toolbar Plot not doing a Refresh/Update on click
我正在尝试将 matplotlib 集成到 wxpython GUI 中,并且我已经成功地显示了交互式导航工具栏。但是,按下任何按钮都不会改变绘图,如果您重新调整 window 的大小或按下另一个按钮(即缩放)并应用相关行动 (select a box/area)。我尝试在网上查找,但大多数答案要么没有回答这个特定问题,要么似乎与我的查询匹配的问题没有得到回答。下面是一段相关代码:
忽略所有大量 Update/Refresh 调用,我只是想让 frame/plot 刷新,但没有用。有什么想法吗?
class p1(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent, -1, size=(50,50))
#Set up Figure
self.figure = matplotlib.figure.Figure()
self.canvas = FigureCanvas(self, -1, self.figure)
#Set up Matplotlib Toolbar
self.chart_toolbar = NavigationToolbar2Wx(self.canvas)
tw,th = self.chart_toolbar.GetSizeTuple()
fw,fh = self.canvas.GetSizeTuple()
self.chart_toolbar.SetSize(wx.Size(fw, th))
self.chart_toolbar.Realize()
graphs_sizer = wx.BoxSizer(wx.VERTICAL)
graphs_sizer.Add(self.canvas, 20, flag=wx.EXPAND, border=5)
graphs_sizer.Add(self.chart_toolbar, 1, flag=wx.ALIGN_CENTER, border=5)
self.SetSizer(graphs_sizer)
self.chart_toolbar.update()
self.canvas.Update()
self.canvas.Refresh()
self.Update()
def plot(self):
self.axes = self.figure.add_subplot(111)
self.axes.plot(aggregatePlot,color='blue',alpha=0.6,lod=True)
self.canvas.draw()
self.canvas.Update()
self.canvas.Refresh()
class TestFrame(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title, size=(200,200))
#Create Splitter Window and Add Left/Right Panels
self.sp = wx.SplitterWindow(self)
self.p1 = p1(self.sp)
self.p2 = wx.Panel(self.sp, style=wx.SUNKEN_BORDER)
self.sp.SplitVertically(self.p1, self.p2, 100)
#Create Buttons
self.siButton = wx.Button(self.p1, -1, "Si", size=(40,20), pos=(10,10))
self.siButton.Bind(wx.EVT_BUTTON, self.Si)
self.siButton = wx.Button(self.p2, -1, "No", size=(40,20), pos=(10,10))
self.siButton.Bind(wx.EVT_BUTTON, self.No)
#Create Status Bar
self.statusbar = self.CreateStatusBar()
self.statusbar.SetStatusText("Hola")
#Plot
self.p1.plot()
#Event Handlers
def Si(self, event):
self.statusbar.SetStatusText("Si")
def No(self, event):
self.statusbar.SetStatusText("No")
app = wx.App(redirect=False)
frame = TestFrame(None, 'Hello World!')
frame.Show(True)
frame.p1.plot()
frame.p1.canvas.Update()
frame.p1.canvas.Refresh()
app.MainLoop()
示例如下,按下缩放按钮,select缩放矩形区域,但没有任何反应。缩放矩形也有大量的小内部矩形,但实际图形没有改变。
matplotlib 的更新刚刚解决了我的问题,不确定是什么问题,但我在网上发现了一个与我遇到的问题类似的错误,它似乎是内部错误。我刚刚使用 conda 更新了我的 matplotlib 版本,运行:
conda update matplotlib
谢谢!
我正在尝试将 matplotlib 集成到 wxpython GUI 中,并且我已经成功地显示了交互式导航工具栏。但是,按下任何按钮都不会改变绘图,如果您重新调整 window 的大小或按下另一个按钮(即缩放)并应用相关行动 (select a box/area)。我尝试在网上查找,但大多数答案要么没有回答这个特定问题,要么似乎与我的查询匹配的问题没有得到回答。下面是一段相关代码:
忽略所有大量 Update/Refresh 调用,我只是想让 frame/plot 刷新,但没有用。有什么想法吗?
class p1(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent, -1, size=(50,50))
#Set up Figure
self.figure = matplotlib.figure.Figure()
self.canvas = FigureCanvas(self, -1, self.figure)
#Set up Matplotlib Toolbar
self.chart_toolbar = NavigationToolbar2Wx(self.canvas)
tw,th = self.chart_toolbar.GetSizeTuple()
fw,fh = self.canvas.GetSizeTuple()
self.chart_toolbar.SetSize(wx.Size(fw, th))
self.chart_toolbar.Realize()
graphs_sizer = wx.BoxSizer(wx.VERTICAL)
graphs_sizer.Add(self.canvas, 20, flag=wx.EXPAND, border=5)
graphs_sizer.Add(self.chart_toolbar, 1, flag=wx.ALIGN_CENTER, border=5)
self.SetSizer(graphs_sizer)
self.chart_toolbar.update()
self.canvas.Update()
self.canvas.Refresh()
self.Update()
def plot(self):
self.axes = self.figure.add_subplot(111)
self.axes.plot(aggregatePlot,color='blue',alpha=0.6,lod=True)
self.canvas.draw()
self.canvas.Update()
self.canvas.Refresh()
class TestFrame(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title, size=(200,200))
#Create Splitter Window and Add Left/Right Panels
self.sp = wx.SplitterWindow(self)
self.p1 = p1(self.sp)
self.p2 = wx.Panel(self.sp, style=wx.SUNKEN_BORDER)
self.sp.SplitVertically(self.p1, self.p2, 100)
#Create Buttons
self.siButton = wx.Button(self.p1, -1, "Si", size=(40,20), pos=(10,10))
self.siButton.Bind(wx.EVT_BUTTON, self.Si)
self.siButton = wx.Button(self.p2, -1, "No", size=(40,20), pos=(10,10))
self.siButton.Bind(wx.EVT_BUTTON, self.No)
#Create Status Bar
self.statusbar = self.CreateStatusBar()
self.statusbar.SetStatusText("Hola")
#Plot
self.p1.plot()
#Event Handlers
def Si(self, event):
self.statusbar.SetStatusText("Si")
def No(self, event):
self.statusbar.SetStatusText("No")
app = wx.App(redirect=False)
frame = TestFrame(None, 'Hello World!')
frame.Show(True)
frame.p1.plot()
frame.p1.canvas.Update()
frame.p1.canvas.Refresh()
app.MainLoop()
示例如下,按下缩放按钮,select缩放矩形区域,但没有任何反应。缩放矩形也有大量的小内部矩形,但实际图形没有改变。
matplotlib 的更新刚刚解决了我的问题,不确定是什么问题,但我在网上发现了一个与我遇到的问题类似的错误,它似乎是内部错误。我刚刚使用 conda 更新了我的 matplotlib 版本,运行:
conda update matplotlib
谢谢!