在不使用集合的情况下动画matplotlib绘图的简单方法

时间:2016-11-28 19:25:32

标签: python numpy matplotlib plot

是否有一种简单的方法可以在matplotlib中为散点图设置动画,方法与创建绘图的方式类似?

我知道目前我可以这样做来创建情节: scatter = ax.scatter([x values], [y values], [z values])

然而,我在网上找到的每个例子都使用numpy函数来生成数据而不是像三个列表那样的外部数据,这让我很难理解如何在更新动画的方法中修改数据。

是否有可能为matplotlib提供一组全新的数据来绘制每个帧? (无论如何,每一点数据都会改变)

注意:如果对这种情况有特殊考虑,这是一个3D图。

1 个答案:

答案 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的第二个示例。