Python matplotlib动画线条打印保持为空

Python matplotlib动画线条打印保持为空,python,matplotlib,Python,Matplotlib,我试图按照基本动画教程找到并调整它以显示已经计算过的数据集,而不是每帧计算一个函数,但我被卡住了。我的数据集涉及随时间变化的XY坐标,包含在列表satxpos和satypos中。我试图创建一个动画,使其跟踪从数据集开始到结束的一条线,每0.1秒显示一个新点。我哪里出了问题有什么帮助吗 from matplotlib import pyplot as plt from matplotlib import animation import numpy as np Code here creates

我试图按照基本动画教程找到并调整它以显示已经计算过的数据集,而不是每帧计算一个函数,但我被卡住了。我的数据集涉及随时间变化的XY坐标,包含在列表
satxpos
satypos
中。我试图创建一个动画,使其跟踪从数据集开始到结束的一条线,每0.1秒显示一个新点。我哪里出了问题有什么帮助吗

from matplotlib import pyplot as plt
from matplotlib import animation
import numpy as np

Code here creates satxpos and satypos as lists

fig = plt.figure()
ax = plt.axes(xlim=(-1e7,1e7), ylim = (-1e7,1e7))
line, = ax.plot([], [], lw=2)

def init():
    line.set_data([], [])
    return line,

def animate(i):
    line.set_data(satxpos[i], satypos[i])
    return line,

anim = animation.FuncAnimation(fig, animate, init_func=init,
                               frames = len(satxpos), interval = 1, blit=True)

编辑:代码运行时没有错误,但生成一个空白打印窗口,没有显示点/线,也没有动画。数据集生成正确,在静态绘图中显示良好。

您的代码看起来正确!只要satxpos和satypos都正确配置和初始化,我相信其他一切都是有效的

问题中没有显示的代码的一部分是调用
anim.save()
plt.show()
函数,这两个函数都是代码工作所必需的(根据您共享的教程!)

因此,您需要添加以下内容:

anim.save('basic_animation.mp4', fps=30, extra_args=['-vcodec', 'libx264'])

plt.show()
在代码的末尾创建动画(并显示它,我想)

希望有帮助


您的代码看起来正确!只要satxpos和satypos都正确配置和初始化,我相信其他一切都是有效的

问题中没有显示的代码的一部分是调用
anim.save()
plt.show()
函数,这两个函数都是代码工作所必需的(根据您共享的教程!)

因此,您需要添加以下内容:

anim.save('basic_animation.mp4', fps=30, extra_args=['-vcodec', 'libx264'])

plt.show()
在代码的末尾创建动画(并显示它,我想)

希望有帮助


我看到您提到“生成satxpos和SATYPO的部分确实创建了有效的数据集。我可以将它们视为静态绘图。”。但我猜问题仍然源于您的
satxpos
satypos


解决问题的一种方法是将两个函数和动画代码替换为
line.set_数据(satxpos[i],satypos[i])
。将
i
设置为
0
1
。。。看看你能不能看到情节。如果没有,您的
satxpo
satypos
就没有您声称的那么有效


例如,有效的
satxpos
satypos
可以如下所示:

x = np.array([np.linspace(-1e7, 1e7, 1000)])
i = 200
satxpos = x.repeat(i, axis=0)
satypos = np.sin(2 * np.pi * (satxpos - 0.01 * np.arange(i).reshape(-1, 1).repeat(satxpos.shape[1], axis=1)))
satypos *= 1e7 / 2
这与您提供的代码一起工作,因此表明您向我们展示的代码很好

根据评论进行编辑:
如果您的
satxpos
satypos
只是
np.linespace
,动画循环将只获得一个点(satxpos[i],satypos[i]),如果没有
marker='o'之类的设置,您将看不到绘图上的点。因此,您在动画中看不到任何内容。

我看到您提到“生成satxpos和SATYPO的部分确实创建了有效的数据集。我可以将它们视为静态绘图。”。但我猜问题仍然源于您的
satxpos
satypos


解决问题的一种方法是将两个函数和动画代码替换为
line.set_数据(satxpos[i],satypos[i])
。将
i
设置为
0
1
。。。看看你能不能看到情节。如果没有,您的
satxpo
satypos
就没有您声称的那么有效


例如,有效的
satxpos
satypos
可以如下所示:

x = np.array([np.linspace(-1e7, 1e7, 1000)])
i = 200
satxpos = x.repeat(i, axis=0)
satypos = np.sin(2 * np.pi * (satxpos - 0.01 * np.arange(i).reshape(-1, 1).repeat(satxpos.shape[1], axis=1)))
satypos *= 1e7 / 2
这与您提供的代码一起工作,因此表明您向我们展示的代码很好

根据评论进行编辑:
如果您的
satxpos
satypos
只是
np.linespace
,动画循环将只获得一个点(satxpos[i],satypos[i])
,如果没有
marker='o'之类的设置,您将看不到绘图上的点。因此,您在动画中看不到任何内容。

为了“跟踪从数据集开头到结尾的一行”,您需要为数组编制索引,以便每个时间步包含一个以上的元素:

line.set_data(satxpos[:i], satypos[:i])
(注意
!)

代码中的所有其他内容看起来都很好,通过上面的操作,您应该可以获得并扩展线图。然后,您可能希望将
interval
设置为大于1的值,因为这意味着1000秒的时间步(这可能有点太快)。我想使用
interval=40
可能是一个很好的开始。

为了“从数据集的开始到结束跟踪一行”,您应该为数组编制索引,以便每个时间步包含一个以上的元素:

line.set_data(satxpos[:i], satypos[:i])
(注意
!)


代码中的所有其他内容看起来都很好,通过上面的操作,您应该可以获得并扩展线图。然后,您可能希望将
interval
设置为大于1的值,因为这意味着1000秒的时间步(这可能有点太快)。我想使用
interval=40
可能是一个好的开始。

这是您的全部代码吗?运行时是否收到任何错误消息?并不是所有的代码,生成satxpos和SATYPO的部分都会创建有效的数据集。我可以把它们看作是一个静态的情节。代码运行时没有错误,但生成的绘图只是一个空白窗口,没有显示动画或点/线。如果您在未共享的代码中的某个点使用anim.save()plt.show()satxpossatxpos不能只是np.linspace。这行不通。它必须是一个二维数组,其中每行是一个
np.linspace
。在我的回答中,我提供了一个关于
satxpos
satxpos
的有效示例以及一些解决问题的想法。我打赌如果你使用
line,=ax.plot([],[],'o')
你会看到一个点在你的代码中移动吗?你明白了吗