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

我正在尝试从头开始模拟双星系统中行星的运动。为此,我需要能够在动画图中绘制点。在编写整个代码之前,我正在学习使用 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 处的一个点,我不明白我可能做错了什么。


白衣非少年
浏览 185回答 1
1回答

互换的青春

为了使您的示例起作用,您必须更改两件事:从某处存储返回值FuncAnimation。否则你的动画会在plt.show().如果不想画线而只想画点,请plt.plot使用animationfrom matplotlib.animation import FuncAnimationimport matplotlib.pyplot as pltimport numpy as npfig, 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()如果你只想在图表上有一个移动点,你必须设置并从inblit=True返回结果:plot.plotanimationfrom matplotlib.animation import FuncAnimationimport matplotlib.pyplot as pltimport numpy as npfig, 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) 处的点,并且不想为每个动画帧计算xand :yfrom matplotlib.animation import FuncAnimationimport matplotlib.pyplot as pltimport numpy as npfig, 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()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python