我真的很想了解我遇到的错误。
简而言之,我正在为从一个LineCollection到另一个LineCollection的平滑过渡设置动画。因此,在每个LineCollection中,我将行配对,其中一个来自LineCollection A,一个来自LineCollection B,随着时间的推移,我将一行的坐标更改为另一行。每个时间步,我都可以将框架保存为png。 (在最后的代码中,我只是获取RGB数据并将其直接输入到视频编写器中,而无需保存图像,但这并不重要)。
奇怪的是,对于很短的一行,有时它们只是消失了。如果只有最小长度,我可以忍受它,但是即使动画线在时间上相互线性映射,它们也可能在动画过程中消失并重新出现几次。 (将每个坐标元组视为时间上的线性Bezier曲线。Linear Bezier Curves.。那么,它们怎么会变得太短,然后又一次又一次地长到足够长的时间?
Check out the progression in these frames, which are about 3% of the total video
例如,注意右下角的小球。
有人知道为什么Matplotlib / LineCollections会这样做吗?
答案 0 :(得分:0)
如果我有
lc = mc.LineCollection(Segments)
答案是使用LineCollection命令
lc.set_snap(False)
如我所料,它必须与后端的某些优化有关。 set_snap作为默认值将点的位置移动到最接近的整数,但仅在水平或垂直线段上。此行为也仅在光栅化输出上,例如在svg上没有。每隔这么多帧,最接近的像素可能会与该段的起点和终点重合,即使使用胖圆帽样式,也不会绘制长度为0的线。在其他帧上,未应用此优化,因为该线并非完全垂直或水平,或者已应用,但是恰好将点放置在不同的像素上。我认为,对于像这样的应用程序,如果要让pme完全控制,最好关闭所有“智能”优化,否则就会出现这样的怪癖。
感谢Diziet帮助我了解该网站。我不能随意将整个代码放在那里,我正在研究可以共享的示例,但是我已经找到了解决方案。