2012-04-28 8 views
9

Sto tracciando i dati in un grafico usando wxPython dove i limiti di dati sull'asse y stanno cambiando con i dati. Mi piacerebbe cambiare l'asse in modo dinamico senza ridisegnare l'intera tela come canvas.draw() piuttosto mi piacerebbe usare blitting per questo come faccio per la trama stessa.Il grafico animato matplotlib non aggiorna le etichette sull'asse usando il blando

Quello che ho avuto modo di lavorare è il cambiamento dell'asse y, e ho gli ytick animati con la trama, purtroppo gli ylabel sono spariti e non riesco a trovare la soluzione. Il motivo sta impostando l'impostazione get_yaxis().set_animated(True) per l'asse.

Ho messo insieme un piccolo esempio di lavoro nel seguito. Cosa mi manca qui?

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

Fondamentalmente sto cercando qualcosa di simile get_ylabels().set_animated(True) ma non posso trovare esso.

risposta

7

Sembra che le etichette siano disegnate ma il comando di blit non le copia sulla tela perché il riquadro di delimitazione include solo la parte interna degli assi.

Per me cambia update_line.background = canvas.copy_from_bbox(ax.bbox)-update_line.background = canvas.copy_from_bbox(ax.get_figure().bbox) e canvas.blit(ax.bbox)-canvas.blit(ax.clipbox) ha reso il lavoro.

+0

Grazie per aver risposto a questo, in effetti questo ha funzionato anche per me, è fantastico! – Merlin

+0

Questo è stato molto utile! Grazie per aver inviato questa risposta. L'animazione di yaxis e tick-labels divenne improvvisamente chiara. – achennu

+0

So che questo è un thread vecchio, ma 'ax.clipbox' mi dà None, quindi questo fallisce. Qualche idea? –

Problemi correlati