matplotlib动画线图保持空

2024-09-28 05:18:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图遵循位于here的基本动画教程,并对其进行调整以显示已计算的数据集,而不是每帧都计算一个函数,但我遇到了问题。我的数据集包含XY坐标,包含在列表satxpossatypos我正在尝试创建一个动画,以便它跟踪一条从数据集开头到结尾的直线,每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)

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


Tags: 数据fromimportherematplotlibinitasline
3条回答

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

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

(注意:!)在

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

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

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

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

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

plt.show()

在你的代码的末尾创建动画(我想,并展示它)!在

希望有帮助!在

Source - Matplotlib Animation Tutorial

我看到你提到“生成satxpo和satypos的部分确实创建了有效的数据集。我可以把它们看作一个静态的情节。但我猜问题还是源于你的satxpos和{}。在

解决问题的一种方法是用line.set_data(satxpos[i], satypos[i])替换两个函数和动画代码。将i设置为01。。。看看你能不能看到情节。如果不是,则您的satxpos和{}就没有您声称的那样有效。在

例如,有效的satxpos和{}可以如下所示:

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

这与您提供的代码一起工作,从而表明您向我们展示的代码是正确的。在

根据评论进行编辑:

如果您的satxpossatypos只是np.linespace,那么动画循环将只得到一个带有(satxpos[i], satypos[i])的点,并且如果没有marker='o'这样的设置,您将看不到绘图上的点。因此,在动画中看不到任何内容。在

相关问题 更多 >

    热门问题