gpt4 book ai didi

python - 为什么使用 FuncAnimation 绘图时点不移动?

转载 作者:行者123 更新时间:2023-12-04 09:23:28 25 4
gpt4 key购买 nike

我试图从头开始模拟双星系统中行星的运动。为此,我需要能够在动画图中绘制点。在对整个事情进行编码之前,我正在学习使用 pyplot 为绘图设置动画。到目前为止,我还没有运气为移动点设置动画。在查看了几个教程和文档之后,我得到了:

import matplotlib
from matplotlib.animation import FuncAnimation
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
ax.set_xlim(0,2)
ax.set_ylim(0,2)
line, = plt.plot(0,0,'bo')
def animation(i):
x=np.linspace(0,2,100)
y=np.linspace(0,1,100)
line.set_data(x[i],y[i],'bo')
return line,
FuncAnimation(fig, animation, frames=np.arange(100),interval=10)
plt.show()
然而,这段代码的输出只是 0,0 处的一个点,我不明白我可能做错了什么。

最佳答案

为了让您的示例工作,您必须更改两件事:

  • 存储来自 FuncAnimation 的返回值某处。否则你的动画会在 plt.show() 之前被删除.
  • 如果不想画线而只想画点,请使用 plt.plotanimation

  • from matplotlib.animation import FuncAnimation
    import matplotlib.pyplot as plt
    import numpy as np
    fig, ax = plt.subplots()
    ax.set_xlim(0,2)
    ax.set_ylim(0,2)
    line, = plt.plot(0,0,'bo')
    def animation(i):
    x=np.linspace(0,2,100)
    y=np.linspace(0,1,100)
    plt.plot(x[i],y[i],'bo')
    return line,

    my_animation=FuncAnimation(fig, animation, frames=np.arange(100),interval=10)
    plt.show()
    如果你只想在图形上有一个移动点,你必须设置 blit=True并从 plot.plot 返回结果在 animation :
    from matplotlib.animation import FuncAnimation
    import matplotlib.pyplot as plt
    import numpy as np
    fig, ax = plt.subplots()
    ax.set_xlim(0,2)
    ax.set_ylim(0,2)
    line, = plt.plot(0,0,'bo')
    def animation(i):
    x=np.linspace(0,2,100)
    y=np.linspace(0,1,100)
    return plt.plot(x[i],y[i],'bo')

    my_animation=FuncAnimation(
    fig,
    animation,
    frames=np.arange(100),
    interval=10,
    blit=True
    )
    plt.show()
    此外,您可能想摆脱 (0,0) 处的点并且不想计算 xy对于每个动画帧:
    from matplotlib.animation import FuncAnimation
    import matplotlib.pyplot as plt
    import numpy as np

    fig, ax = plt.subplots()

    ax.set_xlim(0,2)
    ax.set_ylim(0,2)

    x=np.linspace(0,2,100)
    y=np.linspace(0,1,100)

    def animation(i):
    return plt.plot(x[i], y[i], 'bo')

    my_animation=FuncAnimation(
    fig,
    animation,
    frames=np.arange(100),
    interval=10,
    blit=True
    )
    plt.show()

    关于python - 为什么使用 FuncAnimation 绘图时点不移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63061594/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com