11

y軸のデータ制限がデータとともに変化するwxPythonを使用してプロットにデータをプロットしています。プロット自体と同じように、キャンバス全体を再描画せずに軸を動的に変更しcanvas.draw()たいと思います。blitting

私が仕事に取り掛かったのはy軸の変更であり、プロットで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)ますが、それを見つけることができません。

4

1 に答える 1

9

ラベルが描画されているように見えますが、境界ボックスには軸の内側の部分しか含まれていないため、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)せました。

于 2012-05-22T14:37:57.970 に答える