2012-04-28 11 views
9

Planuję dane na wykresie za pomocą wxPython, gdzie limity danych na osi Y zmieniają się wraz z danymi. Chciałbym zmienić oś dynamicznie bez przerysowywania całego płótna, jak na przykład canvas.draw() raczej chciałbym użyć do tego celu blitting, tak jak ja to zrobiłem dla samego wykresu.animowany wątek matplotlib nie aktualizuje etykiet na osi za pomocą blit

To, co mam do roboty, to zmieniająca się oś Y, a ja dostaję animacje z fabułą, niestety nie ma już znaczków i nie mogę znaleźć rozwiązania. Powodem jest ustawienie wartości get_yaxis().set_animated(True) dla osi.

Poniżej przedstawiam mały przykład pracy. Czego mi tu brakuje?

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() 

Zasadniczo szukam czegoś takiego jak get_ylabels().set_animated(True), ale nie mogę go znaleźć.

Odpowiedz

7

Wygląda na to, że etykiety są rysowane, ale polecenie blit nie kopiuje ich do obszaru roboczego, ponieważ ramka ograniczająca zawiera tylko wewnętrzną część osi.

Dla mnie zmiana update_line.background = canvas.copy_from_bbox(ax.bbox) na update_line.background = canvas.copy_from_bbox(ax.get_figure().bbox) i canvas.blit(ax.bbox) na canvas.blit(ax.clipbox) sprawiła, że ​​działało.

+0

Dziękuję za odpowiedź, w rzeczy samej to zadziałało również dla mnie, to świetnie! – Merlin

+0

To było bardzo pomocne! Dziękujemy za przesłanie tej odpowiedzi. Animowanie yaxis i tick-labels nagle stało się jasne. – achennu

+0

Wiem, że to stary wątek, ale 'ax.clipbox' daje mi None, więc to się nie powiedzie. Jakieś pomysły? –

Powiązane problemy