matplotlib动画线图保持空白

时间:2017-07-17 23:12:27

标签: python matplotlib

我正在尝试按照位于here的基本动画教程并对其进行调整以显示已经计算过的数据集,而不是每帧都评估一个函数,但是我遇到了问题。我的数据集涉及随时间变化的XY坐标,包含在列表<script> function fixQuery(qstr) { var parts = qstr.split('?'); var query = parts[1]; var a= query.split("&"); var out=[]; for (var i = 0; i < a.length; i++) { var b = a[i].split('='); if(decodeURIComponent(b[0])=="skip") { out.push("skip=0") } else { out.push(a[i]); } } return parts[0] + '?' + out.join("&"); } var result= fixQuery("http://example.com/findProducts.php?param1=test+thing&param2=hello&skip=10"); console.log(result) //http://example.com/findProducts.php??param1=test+thing&param2=hello&skip=0 </script>satxpos中我试图创建一个动画,以便跟踪从数据集开头到结尾的一条线,显示为1每0.1秒新点。对我出错的地方有任何帮助吗?

satypos

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

3 个答案:

答案 0 :(得分:3)

为了“追踪从数据集开头到结尾的行”,您可以将数组编入索引,以便每个时间步长包含一个元素:

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

(注意:!)

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

答案 1 :(得分:1)

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

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

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

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

plt.show()

到你的代码的末尾创建动画(并显示它,我猜)!

希望它有所帮助!

Source - Matplotlib Animation Tutorial

答案 2 :(得分:1)

我看到你提到了#34;生成satxpos和satypos的部分会创建有效的数据集。我可以将这些看作是一个静态的情节就好了#34;但我的猜测仍然是来自您satxpossatypos的问题。

您可以解决问题的一种方法是用line.set_data(satxpos[i], satypos[i])替换您的两个函数和动画代码。将i设为01,...并查看是否可以看到该情节。如果没有,则您的satxpossatypos不如您声明的有效。

例如,有效的satxpossatypos可以是这样的:

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'的设置的情节。因此,您在动画中看不到任何内容。