python-3.x 如何使用FuncAnimation显示每帧一个散点标记

wr98u20j  于 2023-11-20  发布在  Python
关注(0)|答案(2)|浏览(122)

我正在尝试使用Matplotlib的FuncAnimation来动画显示每帧动画中的一个点。

# modules
#------------------------------------------------------------------------------
import numpy as np
import matplotlib.pyplot as py
from matplotlib import animation

py.close('all') # close all previous plots

# create a random line to plot
#------------------------------------------------------------------------------

x = np.random.rand(40)
y = np.random.rand(40)

py.figure(1)
py.scatter(x, y, s=60)
py.axis([0, 1, 0, 1])
py.show()

# animation of a scatter plot using x, y from above
#------------------------------------------------------------------------------

fig = py.figure(2)
ax = py.axes(xlim=(0, 1), ylim=(0, 1))
scat = ax.scatter([], [], s=60)

def init():
    scat.set_offsets([])
    return scat,

def animate(i):
    scat.set_offsets([x[:i], y[:i]])
    return scat,

anim = animation.FuncAnimation(fig, animate, init_func=init, frames=len(x)+1, 
                               interval=200, blit=False, repeat=False)

字符串
不幸的是,最终的动画图与原始图不一样。动画图在每帧动画中也会 Flink 几个点。关于如何使用animation软件包正确动画散点图,有什么建议吗?

2w2cym1i

2w2cym1i1#

您的示例的唯一问题是如何在animate函数中填充新坐标。set_offsets需要Nx2 ndarray,而您提供了两个1d数组的元组。
所以就用这个:

def animate(i):
    data = np.hstack((x[:i,np.newaxis], y[:i, np.newaxis]))
    scat.set_offsets(data)
    return scat,

字符串
要保存动画,您可能需要调用:

anim.save('animation.mp4')

okxuctiv

okxuctiv2#

免责声明,我写了一个库,试图使这很容易,但使用ArtistAnimation,称为celluloid。你基本上写你的可视化代码作为正常和简单的图片后,每帧绘制。这里有一个完整的例子:

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import numpy as np
from celluloid import Camera

fig = plt.figure()
camera = Camera(fig)

dots = 40
X, Y = np.random.rand(2, dots)
plt.xlim(X.min(), X.max())
plt.ylim(Y.min(), Y.max())
for x, y in zip(X, Y):
    plt.scatter(x, y)
    camera.snap()
anim = camera.animate(blit=True)
anim.save('dots.gif', writer='imagemagick')

字符串


的数据

相关问题