Matplotlib动画更新函数未设置d

2024-09-28 20:51:01 发布

您现在位置:Python中文网/ 问答频道 /正文

在生成了几个图形之后,我正在用fortran读取一些模拟的输出数据来制作轨道的电影。一开始,我没有在动画中使用blitting,所以虽然它很有效,但速度非常非常慢。在

我最初认为我想要的动画可以分散,因为我有五个字母递减的数据系列来创建一个拖尾效果。以下是我最初的(非blit)更新函数:

def animate(frame):
    jptx, jpty = jx[frame-3:frame], jy[frame-3:frame]
    cptx, cpty = cx[frame-3:frame], cy[frame-3:frame]
    eptx, epty = ex[frame-3:frame], ey[frame-3:frame]
    gptx, gpty = gx[frame-3:frame], gy[frame-3:frame]
    iptx, ipty = ix[frame-3:frame], iy[frame-3:frame]
    ax2.clear()
    ax2.scatter(jptx, jpty, s=32, c=ablue, marker="s", label='Jupiter')
    ax2.scatter(cptx, cpty, s=8, c=ared, marker="o", label='Callisto')
    ax2.scatter(eptx, epty, s=8, c=agreen, marker="o", label='Europa')
    ax2.scatter(gptx, gpty, s=8, c=ablack, marker="o", label='Ganymede')
    ax2.scatter(iptx, ipty, s=8, c=ayellow, marker="o", label='Io')
    ax2.set_xlim(-3, 7)
    ax2.set_ylim(-3, 4)
animation = animation.FuncAnimation(fig2, animate, interval=0.5, frames=jt.size)
print('Begin saving animation')
animation.save('Tabbys Star.mp4', writer='ffmpeg', fps=60)
print('Animation saved')
plt.show()

现在,当我运行脚本时,一个窗口出现了一小段时间,屏幕上有一个非常明显的黄色圆圈,表示正在绘制背景。但是,窗口将立即关闭。这是第二次尝试的相关代码。在这次尝试中添加了黄色圆圈。在

^{pr2}$

最后我还想添加一个图例和一些轴标签,但我相信这可以正常完成。在

那么第二个代码片段中的animate有什么问题?在

谢谢

为清晰起见(再次)


Tags: 数据动画framemarkerlabelanimationscatteranimate
2条回答

您在这里混淆了plt.plot和{}。你得到的错误甚至会在没有任何动画的情况下产生。在

虽然plt.plot有参数color和{}分别设置颜色和标记大小,但它们不允许对不同的点使用不同的值。这就是为什么存在scatter图。 ^{}有参数c和{}分别设置颜色和标记大小。在

所以你需要使用散射来获得不同颜色的点。在

jpt = plt.scatter(xdata, ydata, marker='.', s=32, c=ablue, label='Jupiter')

然后对于动画,您需要调整代码以便与scatter一起使用,因为它没有.set_data方法,而是一个^{}方法,它需要一个2列数组输入。在

^{pr2}$

总的来说,脚本看起来像

^{3}$

请确保渲染它超过1帧,按settingframes设置为一个高值。在您发布的代码中,没有明确定义帧数,这可能会导致此问题。在

相关问题 更多 >