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

谢谢!