我正在尝试按照位于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¶m2=hello&skip=10");
console.log(result)
//http://example.com/findProducts.php??param1=test+thing¶m2=hello&skip=0
</script>
和satxpos
中我试图创建一个动画,以便跟踪从数据集开头到结尾的一条线,显示为1每0.1秒新点。对我出错的地方有任何帮助吗?
satypos
编辑:代码运行没有错误,但生成一个空白的绘图窗口,没有显示点/行,没有任何动画。正确生成数据集并在静态图中查看。
答案 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()
到你的代码的末尾创建动画(并显示它,我猜)!
希望它有所帮助!
答案 2 :(得分:1)
我看到你提到了#34;生成satxpos和satypos的部分会创建有效的数据集。我可以将这些看作是一个静态的情节就好了#34;但我的猜测仍然是来自您satxpos
和satypos
的问题。
您可以解决问题的一种方法是用line.set_data(satxpos[i], satypos[i])
替换您的两个函数和动画代码。将i
设为0
,1
,...并查看是否可以看到该情节。如果没有,则您的satxpos
和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'
的设置的情节。因此,您在动画中看不到任何内容。