wxpython中的动态绘图

2 投票
4 回答
4666 浏览
提问于 2025-04-15 13:09

我正在开发一个图形界面,用来从串口读取连续的数据。读取数据后,我会进行一些计算,然后把结果绘制成图表并刷新(也就是动态绘图)。为此,我使用了matplotlib提供的wx后端。基本上,我用一个数组来存储我的结果,每次计算后就把新结果加到这个数组里,然后重新绘制整个图表。为了让图表看起来是“动态”的,我只是为每次迭代设置了x轴的上下限。类似于这里提到的内容:

http://eli.thegreenplace.net/2008/08/01/matplotlib-with-wxpython-guis/

不过,问题是因为数据是连续的,如果我一直绘制图表,最终系统的内存会用完,系统就会崩溃。有没有其他方法可以让我连续绘制结果呢?

4 个回答

1

我用Python的Tkinter创建了一个这样的组件。源代码可以在这里找到。

基本上,你需要把绘制的数据存放在某个地方。因为你不能在内存中无限制地存放数据点,所以你要么把它们保存到硬盘上,要么就得覆盖掉旧的数据点。

1

数据和数据的表现形式是两回事。如果你有一些重要的数据需要以后分析,可能会想把这些数据存储到硬盘上。但为了显示的方便,你可能只想保留一段固定的时间内的数据,或者只保留最近的N个数据点。你甚至可以让用户选择想要显示的时间范围。

3

为了做到这一点,我基本上使用一个数组来存储我的结果,我会不断地把新的结果添加到这个数组里。

试着限制这个数组的大小,可以通过删除旧的数据或者每隔n个条目删除一个(因为屏幕分辨率的限制,所有的条目其实也不会全部显示出来)。我假设你会把所有的数据写入磁盘,这样就不会丢失任何东西。

另外,检查一下你的代码是否有内存泄漏。就是那些你用过但不再需要的东西,因为你还保留着对它的引用,所以它没有被垃圾回收掉。

撰写回答