Анимированный график matplotlib не будет обновлять метки на оси с помощью blit

Я рисую данные на графике, используя wxPython, где пределы данных по оси y -меняются вместе с данными. Я хотел бы динамически менять ось, не перерисовывая весь холст, как canvas.draw(), а для этого я хотел бы использовать blitting, как и для самого сюжета.

Что мне нужно сделать, так это изменить ось y -, и я получаю анимированные метки y вместе с сюжетом, к сожалению, метки y исчезли, и я не могу найти решение. Причина заключается в установке значения get_yaxis().set_animated(True)для оси.

Далее я собрал небольшой рабочий пример. Что мне здесь не хватает?

import matplotlib
matplotlib.use('WXAgg')

import wx
import pylab as p
import numpy as npy
from time import sleep

ax = p.subplot(111)
canvas = ax.figure.canvas
x = npy.arange(0,2*npy.pi,0.01)
line, = p.plot(x, npy.sin(x), animated=True)

ax.get_yaxis().set_animated(True)

def update_line(*args):
    if update_line.background is None:
        update_line.background = canvas.copy_from_bbox(ax.bbox)

    for i in range(20):
        canvas.restore_region(update_line.background)

        line.set_ydata((i/10.0)*npy.sin(x))
        ax.set_ylim(-1*i/5.0-0.5,i/5.0+0.5)

        ax.draw_artist(ax.get_yaxis())

        ax.draw_artist(line)

        canvas.blit(ax.bbox)

        sleep(0.1)
    print 'end'


update_line.cnt = 0
update_line.background = None
wx.EVT_IDLE(wx.GetApp(), update_line)
p.show()

В основном я ищу что-то вроде get_ylabels().set_animated(True), но не могу найти.

9
задан Thomas 23 July 2013 в 19:36
поделиться