我想在matplotlib中对
以下是一个虚拟的示例:
fill_between
形状进行动画处理,但我不知道如何更新PolyCollection
的数据。以下是一个简单的示例:我有两条线,并且一直填充它们之间的区域。当然,这些线会发生变化并进行动画处理。以下是一个虚拟的示例:
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 );
问题是如何在每次调用update_data()
并在blit
(“# Update fill data too”和“# Draw fill too”之前)之前绘制基于line1_data
和line2_data
的fill_between
Poly
数据。 我尝试使用fill_lines.set_verts()
但没有成功,也找不到示例。
*collection
对象在更新时不太友好。原因是它们丢弃了所有元数据,这些元数据允许您在数据空间和绘图空间之间进行映射,并仅保留要绘制的列表。这是为了快速渲染而做出的权衡。 - tacaswell