анимация matplotlib с панелью инструментов - PullRequest
2 голосов
/ 21 июня 2011

У меня есть один огромный массив, и я пытаюсь создать эффект анимации.Мой подход:

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 ().Итак, мой вопрос, как я могу сделать обновление графика, который сохраняет настройки, сделанные с помощью панели инструментов?

regards, Bogdan

1 Ответ

2 голосов
/ 21 июня 2011

Вы устанавливаете лимиты (startPosition, startPosition + 1000) и (miny-50, miny + 50) в вашем методе draw(). Для следующего кадра вам нужно будет определить, какие ограничения должны быть на основе ваших текущих ограничений.

Скажем, вы хотите, чтобы ваш xlim увеличивался на 1000 в каждом кадре, но сохранял масштаб шкалы. Вы можете сделать следующее:

def draw(self):
    xlim = self.axes.get_xlim()
    self.axes.set_xlim(xlim[0]+1000, xlim[1]+1000)
    # ylim unchanged
    self.canvas.draw()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...