Python 如何在使用PyQtGraph时清除“while”循环中的绘图?

Python 如何在使用PyQtGraph时清除“while”循环中的绘图?,python,plot,memory-leaks,pyqtgraph,Python,Plot,Memory Leaks,Pyqtgraph,我正在使用PyQtGraph快速可视化我的数据采集。为此,我不断使用while循环重新绘制数据。此代码的简化版本如下所示: import time import numpy import pyqtgraph as pg from pyqtgraph.Qt import QtGui, QtCore x = numpy.linspace(-2 * numpy.pi, 2 * numpy.pi, 1000) y = numpy.cos(x) # Plot win = pg.GraphicsWind

我正在使用PyQtGraph快速可视化我的数据采集。为此,我不断使用
while
循环重新绘制数据。此代码的简化版本如下所示:

import time
import numpy
import pyqtgraph as pg
from pyqtgraph.Qt import QtGui, QtCore

x = numpy.linspace(-2 * numpy.pi, 2 * numpy.pi, 1000)
y = numpy.cos(x)

# Plot
win = pg.GraphicsWindow()
win.resize(800, 800)

p = win.addPlot()
p.plot(x, y, pen = "y")

i = 0
while i < 5000:
  start_time = time.time()

  noise = numpy.random.normal(0, 1, len(y))
  y_new = y + noise

  p.plot(x, y_new, pen = "y", clear = True)
  p.enableAutoRange("xy", False)

  pg.QtGui.QApplication.processEvents()

  i += 1

  end_time = time.time()
  print("It has been {0} seconds since the loop started".format(end_time - start_time))

win.close()
导入时间
进口numpy
将pyqtgraph作为pg导入
从pyqtgraph.Qt导入QtGui,QtCore
x=numpy.linspace(-2*numpy.pi,2*numpy.pi,1000)
y=numpy.cos(x)
#密谋
win=第页GraphicsWindow()
win.resize(800800)
p=win.addPlot()
p、 绘图(x,y,pen=“y”)
i=0
当我<5000时:
开始时间=time.time()
噪声=numpy.随机.正常(0,1,len(y))
y_new=y+噪声
p、 绘图(x,y_new,pen=“y”,clear=True)
p、 启用自动范围(“xy”,假)
pg.QtGui.QApplication.processEvents()
i+=1
结束时间=time.time()
打印(“循环启动后已{0}秒”。格式(结束时间-开始时间))
赢
当我对每次迭代计时时,我发现我没有正确地清除图形。迭代时间一直在增加,我正在放慢数据采集的速度。对于上述示例,开始时的迭代时间约为
0.009秒
,而结束时的迭代时间约为
0.04秒
。因此,我有一个内存泄漏

我知道在
matplotlib
中,我应该调用be
clf()
来正确清除绘图。不幸的是,我对PyQtGraph不太熟悉,认为
clear=True
可以解决这个问题。我相信这应该是可能的,因为
PyQtGraph
是为这种用途而设计的


如何在每次迭代中清除图形以确保不会减慢数据采集速度?

在plotItem上调用plot时,将创建一个新的plotDataItem。所有这些plotDataItems似乎都没有正确清除。您可以尝试只使用一个plotDataItem并更新其内容。通过使用

plot = p.plot(x, y, pen = "y")
然后在你的循环里

plot.setData(x, y_new)