wxpython中的动态绘图
我正在开发一个图形界面,用来从串口读取连续的数据。读取数据后,我会进行一些计算,然后把结果绘制成图表并刷新(也就是动态绘图)。为此,我使用了matplotlib提供的wx后端。基本上,我用一个数组来存储我的结果,每次计算后就把新结果加到这个数组里,然后重新绘制整个图表。为了让图表看起来是“动态”的,我只是为每次迭代设置了x轴的上下限。类似于这里提到的内容:
http://eli.thegreenplace.net/2008/08/01/matplotlib-with-wxpython-guis/
不过,问题是因为数据是连续的,如果我一直绘制图表,最终系统的内存会用完,系统就会崩溃。有没有其他方法可以让我连续绘制结果呢?
4 个回答
1
我用Python的Tkinter创建了一个这样的组件。源代码可以在这里找到。
基本上,你需要把绘制的数据存放在某个地方。因为你不能在内存中无限制地存放数据点,所以你要么把它们保存到硬盘上,要么就得覆盖掉旧的数据点。
1
数据和数据的表现形式是两回事。如果你有一些重要的数据需要以后分析,可能会想把这些数据存储到硬盘上。但为了显示的方便,你可能只想保留一段固定的时间内的数据,或者只保留最近的N个数据点。你甚至可以让用户选择想要显示的时间范围。
3
为了做到这一点,我基本上使用一个数组来存储我的结果,我会不断地把新的结果添加到这个数组里。
试着限制这个数组的大小,可以通过删除旧的数据或者每隔n个条目删除一个(因为屏幕分辨率的限制,所有的条目其实也不会全部显示出来)。我假设你会把所有的数据写入磁盘,这样就不会丢失任何东西。
另外,检查一下你的代码是否有内存泄漏。就是那些你用过但不再需要的东西,因为你还保留着对它的引用,所以它没有被垃圾回收掉。