2012-04-28 30 views
9

Tôi đang vẽ biểu đồ dữ liệu trong một ô sử dụng wxPython nơi giới hạn dữ liệu trên trục y đang thay đổi với dữ liệu. Tôi muốn thay đổi trục động mà không vẽ lại toàn bộ khung hình như canvas.draw() thay vì tôi muốn sử dụng blitting cho điều này như tôi làm cho cốt truyện.âm mưu hoạt hình matplotlib sẽ không cập nhật nhãn trên trục bằng cách sử dụng blit

Những gì tôi đã làm việc là thay đổi trục y, và tôi nhận được yticks hoạt hình với cốt truyện, tiếc là các ylabels đã biến mất và tôi không thể tìm thấy giải pháp. Lý do là đặt cài đặt get_yaxis().set_animated(True) cho trục.

Tôi đã đưa ra một ví dụ làm việc nhỏ sau đây. Tôi thiếu gì ở đây?

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

Về cơ bản tôi đang tìm kiếm thứ gì đó như get_ylabels().set_animated(True) nhưng tôi không thể tìm thấy.

Trả lời

7

Có vẻ như các nhãn được vẽ nhưng lệnh blit không sao chép chúng sang khung vẽ bởi vì hộp giới hạn chỉ bao gồm phần bên trong của các trục.

Để tôi thay đổi update_line.background = canvas.copy_from_bbox(ax.bbox) thành update_line.background = canvas.copy_from_bbox(ax.get_figure().bbox)canvas.blit(ax.bbox) thành canvas.blit(ax.clipbox) làm cho nó hoạt động.

+0

Cảm ơn bạn đã trả lời câu hỏi này, thực sự điều này đã hiệu quả với tôi, điều đó thật tuyệt vời! – Merlin

+0

Điều này rất hữu ích! Cảm ơn bạn đã gửi câu trả lời này. Hoạt hình yaxis và tick-label đột nhiên trở nên rõ ràng. – achennu

+0

Tôi biết đây là một chủ đề cũ, nhưng 'ax.clipbox' mang lại cho tôi Không có gì để điều này không thành công. Bất kỳ ý tưởng? –

Các vấn đề liên quan