2012-04-28 1 views
9

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

То, что я получил, это изменение оси y, и я получаю yticks, анимированные сюжетом, к сожалению, ярлыки исчезли, и я не могу найти решение. Причиной является установка установки 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), но я не могу найти его.

ответ

7

Похоже, что метки нарисованы, но команда blit не копирует их на холст, потому что ограничивающая рамка включает только внутреннюю часть осей.

Для меня изменение update_line.background = canvas.copy_from_bbox(ax.bbox) на update_line.background = canvas.copy_from_bbox(ax.get_figure().bbox) и canvas.blit(ax.bbox) на canvas.blit(ax.clipbox) заставило его работать.

+0

Спасибо, что ответили на это, действительно, это сработало и для меня, это здорово! – Merlin

+0

Было очень полезно! Спасибо, что представили этот ответ. Анимированные ярлыки и тик-метки внезапно стали ясными. – achennu

+0

Я знаю, что это старый поток, но 'ax.clipbox' дает мне None, так что это не удается. Есть идеи? –