如何让PyQtGraph的滚动图在循环中清除前一行?

0 人关注

我希望从一个有多列的数组中绘制一些数据,并希望每一列都是同一滚动图上的不同线条。由于有很多列,我认为在一个循环中绘制它们是合理的。 我还想用一条线来绘制第二个滚动图。

我可以让单行图正确滚动,但包含多行图的图从更新的数组中重绘而不清除之前的行。

我怎样才能在for循环中清除这些行呢。我想, setData ,可能会进行清除。 我是否必须在循环中加入 pg.QtGui.QApplication.processEvents() 或类似的东西?我试着添加这个调用,但没有效果。

My code:

#Based on example from PyQtGraph documentation
import numpy as np
import pyqtgraph as pg
win = pg.GraphicsLayoutWidget(show=True)
win.setWindowTitle('pyqtgraph example: Scrolling Plots')
timer = pg.QtCore.QTimer()
plot_1 = win.addPlot()
plot_2 = win.addPlot()
data1 = np.random.normal(size=(300))
curve1 = plot_1.plot(data1)
data_2d = np.random.normal(size=(3,300))
def update_plot():
    global data1, data_2d
    data1[:-1] = data1[1:]  
    data1[-1] = np.random.normal()
    curve1.setData(data1)
    for idx, n in enumerate(data_2d):
        n[:-1] = n[1:]
        n[-1] = np.random.normal()
        curve2 = plot_2.plot(n,pen=(idx))
        curve2.setData(n)
        #pg.QtGui.QApplication.processEvents() #Does nothing
timer = pg.QtCore.QTimer()
timer.timeout.connect(update_plot)
timer.start(50)
if __name__ == '__main__':
    pg.exec()
    
python
numpy
pyqtgraph
Damian
Damian
发布于 2022-09-11
1 个回答
outofculture
outofculture
发布于 2022-09-24
已采纳
0 人赞同

You could 每次都用 .clear() 来清除所有的曲线图,但这并不是很好的表现。一个更好的解决方案是保留所有的曲线对象,每次都对它们调用 setData ,就像你对单曲线图所做的那样。例如