2012-04-28 19 views
9

का उपयोग कर अक्ष पर लेबल अपडेट नहीं करेगा I wxPython का उपयोग करके एक प्लॉट में डेटा प्लॉट कर रहा है जहां वाई-अक्ष पर डेटा सीमा डेटा के साथ बदल रही है। मैं canvas.draw() जैसे पूरे कैनवास को दोबारा बिना किसी गति के अक्ष को गतिशील रूप से बदलना चाहता हूं, इसके बजाय मैं blitting का उपयोग करना चाहता हूं क्योंकि मैं साजिश के लिए स्वयं करता हूं।matplotlib एनिमेटेड प्लॉट धुरी

मुझे जो काम करना है वह बदलना वाई-अक्ष है, और मुझे साजिश के साथ एनिमेटेड yticks मिलते हैं, दुर्भाग्यवश ylabels चले गए हैं और मुझे समाधान नहीं मिल रहा है। कारण अक्ष के लिए 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

ऐसा लगता है कि लेबल खींचे जाते हैं लेकिन ब्लिट कमांड उन्हें कैनवास पर कॉपी नहीं करता है क्योंकि बाउंडिंग बॉक्स में केवल अक्ष के आंतरिक हिस्से को शामिल किया जाता है।

मेरे लिए 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' मुझे कोई नहीं देता है इसलिए यह विफल हो जाता है। कोई विचार? –