をアニメーション化。この単純な例を挙げる:私は2つの線を持ち、私は常にそれらの間を埋める。もちろん、線は変化し、アニメーション化されます。matplotlibのは、私はmatplotlibの内部fill_between形状をアニメーション化しようとしていると私はPolyCollectionのデータを更新する方法がわからないfill_between形状
import matplotlib.pyplot as plt
# Init plot:
f_dummy = plt.figure(num=None, figsize=(6, 6));
axes_dummy = f_dummy.add_subplot(111);
# Plotting:
line1, = axes_dummy.plot(X, line1_data, color = 'k', linestyle = '--', linewidth=2.0, animated=True);
line2, = axes_dummy.plot(X, line2_data, color = 'Grey', linestyle = '--', linewidth=2.0, animated=True);
fill_lines = axes_dummy.fill_between(X, line1_data, line2_data, color = '0.2', alpha = 0.5, animated=True);
f_dummy.show();
f_dummy.canvas.draw();
dummy_background = f_dummy.canvas.copy_from_bbox(axes_dummy.bbox);
# [...]
# Update plot data:
def update_data():
line1_data = # Do something with data
line2_data = # Do something with data
f_dummy.canvas.restore_region(dummy_background);
line1.set_ydata(line1_data);
line2.set_ydata(line2_data);
# Update fill data too
axes_dummy.draw_artist(line1);
axes_dummy.draw_artist(line2);
# Draw fill too
f_dummy.canvas.blit(axes_dummy.bbox);
質問は)(line1_dataに基づいてfill_betweenポリデータとline2_dataたびupdate_dataを更新するために呼び出され、ブリット前にそれらを描く方法です(「#更新フィルデータ:ここ
はダミー例です& "#塗りつぶしも")。私は成功せず)(fill_lines.set_vertsを試してみましたが、一例を見つけることができませんでした...ありがとう!誰かが指摘したように
あなたは削除して、完全にすべてのフレームを再描画する必要があるかもしれません。 '* collection'オブジェクトは更新するとうまくいきません。その理由は、データスペースと描画スペースの間のマッピングを可能にするすべてのメタデータを投げ捨て、描画するもののリストを保持することだけです。これはすぐにレンダリングするトレードオフです。 – tacaswell
update_dataの中にf_dummy.canvas.draw()を使用しますか?私はこれで始めましたが、残念ながら、リアルタイムで信号を処理して再生しているので、高速なプロットが必要です。再生に影響を与えないようにプロットする必要があります(draw()を呼び出すと再生が停止します)。サウンドを再生しながらすべてを再描画するための高速なスレッド技を知っているなら、素敵です - 私はthreading.start(...)を使ってdrawを呼び出しました。私は他のより速いプロットライブラリがあることを知っていますが、私はmatplotlibに固執することを好み、リストア/ blitトリックは私のために十分速く働いていました。 – Sebastian