为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

白衣非少年 2023-03-30 10:08:17
我正在尝试从头开始模拟双星系统中行星的运动。为此,我需要能够在动画图中绘制点。在编写整个代码之前,我正在学习使用 pyplot 为情节制作动画。到目前为止,我还没有运气为移动点设置动画。在查看了几个教程和文档之后,我得到了以下内容:import matplotlibfrom 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)    line.set_data(x[i],y[i],'bo')    return line,FuncAnimation(fig, animation, frames=np.arange(100),interval=10)plt.show()然而,这段代码的输出只是 0,0 处的一个点,我不明白我可能做错了什么。
查看完整描述

1 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

为了使您的示例起作用,您必须更改两件事:

  1. 从某处存储返回值FuncAnimation。否则你的动画会在plt.show().

  2. 如果不想画线而只想画点,请plt.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)

    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.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)

  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 :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()


查看完整回答
反对 回复 2023-03-30
  • 1 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信