带工具栏的 matplotlib 动画

标签 matplotlib

我有一个巨大的数组,我正在尝试创建一种动画效果。我的做法是:

def initPlot(self):
    if not hasattr( self, 'axes' ):
        self.axes = self.figure.add_subplot( 111 )

    self.axes.set_title('Monitor data', size=12)

    pylab.setp(self.axes.get_xticklabels(), fontsize=8)
    pylab.setp(self.axes.get_yticklabels(), fontsize=8)
    self.maxy = 0
    self.miny = 0
    for i, pt_list in enumerate( self.point_lists ):             
        plot_pts = num.array( pt_list )
        clr = self.clr_list[i]
        self.plot_data = self.axes.plot( plot_pts, linewidth= 1.0, color=clr, )[0]
        self.plot_data.set_xdata(num.arange(len(plot_pts)))
        self.plot_data.set_ydata(plot_pts)
        maxPlot = plot_pts.max()
        minPlot = plot_pts.min()
        if maxPlot > self.maxy:
            self.maxy = maxPlot
        if minPlot < self.miny:
            self.miny = minPlot


def draw( self ):
    """Draw data."""                 
    self.axes.set_xbound(lower=self.startPosition, upper=self.startPosition + 1000)
    self.axes.set_ybound(lower=self.miny - 50, upper = self.maxy + 50)        
    self.canvas.draw()


def onTimerPassed(self, event):
    if self.animation:
        self.startPosition = self.startPosition + 10
        self.draw()

现在效果很好,动画也符合我的预期。不过,我还需要集成一个 NavigationToolbar2WxAgg。我的问题来了。当动画处于事件状态时,根据 self.canvas.draw() 的判断,任何缩放/重新定位等都会自动取消。所以我的问题是如何进行绘图更新以保持工具栏完成的设置?

问候, 博格丹

最佳答案

您在 draw() 方法中强制将限制设置为 (startPosition, startPosition+1000) 和 (miny-50, miny+50)。对于下一帧,您必须根据当前的限制来推断您的限制。

假设您希望 xlim 每帧增加 1000,但保留 yscale。您可以执行以下操作:

def draw(self):
    xlim = self.axes.get_xlim()
    self.axes.set_xlim(xlim[0]+1000, xlim[1]+1000)
    # ylim unchanged
    self.canvas.draw()

关于带工具栏的 matplotlib 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6424381/

相关文章:

Python:比较不同 bin 大小的直方图

python - Matplotlib 无法生成准确的 slider 图

python-3.x - 缓慢的 matplotlib - 将图保存到 PNG

python - Matplotlib 失败并出现 ValueError : cannot convert float NaN to integer

python - 如何沿 x 轴移动 pcolor 图

Python - 情节旁边的图例和保存的图中

python - 如何在Python中应用具有固定x截距的线性回归?

python - 使用 matplotlib 按钮在我创建的绘图之间交替/切换

Python fig.text() - 检索文本的高度以进行对齐

python - 更改颜色栏标题的位置