【发布时间】:2017-03-25 00:06:55
【问题描述】:
我正在构建一个 PyQT4 gui,它绘制来自某个文件的点的散点图。现在,这些点在 .txt 文件中配对为 X,Y。基本上,X 数据是以毫秒为单位的时间,而 Y 是在特定时间发生的某个事件。我想创建一个动画 matplotlib 散点图,它将时间轴从 0 平移到时间 t,比如说 1000 ms,而时间(X)轴平移 100 ms 帧或部分。因此,在绘制这些点时,绘图似乎从 0 移动到时间 t。
数据样本如下图:
105.40000000000001 330.0
105.40000000000001 344.0
105.5 259.0
105.5 262.0
.........
.....
等等..
我正在尝试使用 matplotlib 的 FuncAnimation,它采用更新方法,我尝试将更多数据添加到散点图中。但是我如何以 100 毫秒的步长平移时间轴。
我尝试使用数据生成器,每次调用更新方法时都会产生下一个数据点,但是当点数更多时,时间轴会变慢。
这是我迄今为止尝试过的。
ani = animation.FuncAnimation(self.figure,self._upd_plot,self.data_gen,blit=False, interval=10, repeat=False)
def data_gen(self):
for d in self.data:
yield d
def init_ani(self):
self.g = self.data_gen()
def _upd_plot(self,d):
d = next(g)
self.time.append(d[0])
self.neu.append(d[1])
self.scat.set_xdata(self.time)
self.scat.set_ydata(self.neu)
self.canvas.draw()
问题出在哪里? 任何帮助将不胜感激。请原谅我的英语不好
【问题讨论】:
-
您不需要在动画代码中处理的
self.canvas.draw()。我假设有更多关于这个的类代码被删除了?self.scat是什么?见matplotlib.org/examples/animation/animate_decay.html -
是的,肯定有更多关于这个的类代码,我仍在努力。
self.scat是对在 init 中完成的散点图初始化的引用,它使用空的 x 和 y 数据完成。 -
那么你的意思是,如果只是设置绘图对象的数据,绘图就会用新的点更新?不重绘画布?
-
FuncAnimation内置了重绘逻辑
标签: python animation matplotlib pyqt4 scatter-plot