为什么在使用 FuncAnimation 绘图时点不移动?
Why is a point not moving when plotting using 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 处的一个点,我不明白我可能做错了什么。
为了使您的示例生效,您必须更改两件事:
- 将
FuncAnimation
中的 return 值存储在某处。否则你的动画会在 plt.show()
. 之前被删除
- 如果不想画线而只想画点,请在
animation
中使用plt.plot
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
和 return animation
中 plot.plot
的结果:
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) 处的点,并且不想为每个动画帧计算 x
和 y
:
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()
我正在尝试从头开始模拟双星系统中行星的运动。为此,我需要能够在动画图中绘制点。在编写整个代码之前,我正在学习使用 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
中的 return 值存储在某处。否则你的动画会在plt.show()
. 之前被删除
- 如果不想画线而只想画点,请在
animation
中使用
plt.plot
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
和 return animation
中 plot.plot
的结果:
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) 处的点,并且不想为每个动画帧计算 x
和 y
:
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()