Python matplotlib动画线条打印保持为空
我试图按照基本动画教程找到并调整它以显示已经计算过的数据集,而不是每帧计算一个函数,但我被卡住了。我的数据集涉及随时间变化的XY坐标,包含在列表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
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()
?satxpos
和satxpos
不能只是np.linspace
。这行不通。它必须是一个二维数组,其中每行是一个np.linspace
。在我的回答中,我提供了一个关于satxpos
和satxpos
的有效示例以及一些解决问题的想法。我打赌如果你使用line,=ax.plot([],[],'o')
你会看到一个点在你的代码中移动吗?你明白了吗