是否有一种简单的方法可以在matplotlib中为散点图设置动画,方法与创建绘图的方式类似?
我知道目前我可以这样做来创建情节:
scatter = ax.scatter([x values], [y values], [z values])
然而,我在网上找到的每个例子都使用numpy函数来生成数据而不是像三个列表那样的外部数据,这让我很难理解如何在更新动画的方法中修改数据。
是否有可能为matplotlib提供一组全新的数据来绘制每个帧? (无论如何,每一点数据都会改变)
注意:如果对这种情况有特殊考虑,这是一个3D图。
答案 0 :(得分:1)
最简单的动画制作方式是以交互模式绘制,作为带列表的最小(ish)示例,
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
plt.ion()
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
plt.show()
for i in range(1000):
x =[1,2,3,4,5,6,7,8,9,10]
y =[5,6+i%10,2,3,13,4,1,2,4-i%10,8]
z =[2+(i%10)*2.,3,3,3,5,7,9+i%10,11,9+i%10,10]
ax.scatter(x, y, z, marker='o')
ax.set_xlim([0.,10.])
ax.set_ylim([0.,20.])
ax.set_zlim([0.,20.])
plt.pause(0.01)
plt.cla()
使用numpy数组而不是列表进行绘图的原因是数据存储为连续的块,这会加快绘图(很容易转换为xn = np.array(x)
的数组)。大多数示例将使用各种numpy函数的主要原因是,在matplotlib中提供带动画的自包含演示更容易,需要调整集合对象的函数。有关最小散点图动画的一个很好的示例,请参阅this的第二个示例。