在 PyQtGraph 中删除/删除图例
Remove / Delete Legend in PyQtGraph
在实时图表上创建了两条线并添加了一个图例。在下次更新时,使用 self.pw.clear().
删除图表上的线条
但是图例并没有被删除,而且每次更新都会添加一个新的图例实例,数量很多,而且计划更新的FPS很快下降。
此处 http://www.pyqtgraph.org/documentation/graphicsItems/plotitem.html 表示 Clear():“从 ViewBox 中删除所有项目。”
正在尝试清除/删除项目 - 还没有帮助(语法不正确,或者过程调用不正确)。
如何在更新图表时删除图例或停止创建多个图例?
import random
from PyQt5 import QtGui
import pyqtgraph as pg
import sys
class Mainwindow(QtGui.QMainWindow):
def __init__(self, parent):
super(Mainwindow, self).__init__()
self.centralWidget = QtGui.QWidget()
self.setCentralWidget(self.centralWidget)
self.resize(1000, 500)
self.vbox = QtGui.QVBoxLayout()
self.pw = pg.PlotWidget()
self.vbox.addWidget(self.pw)
self.centralWidget.setLayout(self.vbox)
# Update chart
self.timer = pg.QtCore.QTimer()
self.timer.setSingleShot(False)
self.timer.timeout.connect(self.update)
self.timer.start(10)
def update(self):
x = []
y = []
z = []
for i in range(10000):
x.append(i)
y.append(random.uniform(0, 1))
z.append(1 + random.uniform(0, 1))
self.pw.clear()
line_red = pg.PlotCurveItem(x, y, clear=True, pen='r', name='Red')
line_yellow = pg.PlotCurveItem(x, z, clear=True, pen='y', name='Yellow')
self.pw.addItem(line_red)
self.pw.addItem(line_yellow)
self.pw.addLegend()
app = QtGui.QApplication(sys.argv)
ex = Mainwindow(app)
ex.show()
sys.exit(app.exec_())
你有一个XY problem,而不是问How to update plot? questions 如何消除重复的图例?。所以我会指出一个解决潜在问题的方法。
考虑到上述情况,逻辑是只创建一次项目并使用setData()
方法更新信息。
import random
import sys
import pyqtgraph as pg
from pyqtgraph.Qt import QtGui
class Mainwindow(QtGui.QMainWindow):
def __init__(self, parent):
super(Mainwindow, self).__init__()
self.centralWidget = QtGui.QWidget()
self.setCentralWidget(self.centralWidget)
self.resize(1000, 500)
vbox = QtGui.QVBoxLayout(self.centralWidget)
self.pw = pg.PlotWidget()
self.pw.addLegend()
vbox.addWidget(self.pw)
# Update chart
self.timer = pg.QtCore.QTimer()
self.timer.setSingleShot(False)
self.timer.timeout.connect(self.update)
self.timer.start(10)
self.line_red = pg.PlotCurveItem(clear=True, pen="r", name="Red")
self.line_yellow = pg.PlotCurveItem(clear=True, pen="y", name="Yellow")
self.pw.addItem(self.line_red)
self.pw.addItem(self.line_yellow)
def update(self):
x = []
y = []
z = []
for i in range(10000):
x.append(i)
y.append(random.uniform(0, 1))
z.append(1 + random.uniform(0, 1))
self.line_red.setData(x, y)
self.line_yellow.setData(x, z)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
ex = Mainwindow(app)
ex.show()
sys.exit(app.exec_())
在实时图表上创建了两条线并添加了一个图例。在下次更新时,使用 self.pw.clear().
删除图表上的线条但是图例并没有被删除,而且每次更新都会添加一个新的图例实例,数量很多,而且计划更新的FPS很快下降。
此处 http://www.pyqtgraph.org/documentation/graphicsItems/plotitem.html 表示 Clear():“从 ViewBox 中删除所有项目。”
正在尝试清除/删除项目 - 还没有帮助(语法不正确,或者过程调用不正确)。
如何在更新图表时删除图例或停止创建多个图例?
import random
from PyQt5 import QtGui
import pyqtgraph as pg
import sys
class Mainwindow(QtGui.QMainWindow):
def __init__(self, parent):
super(Mainwindow, self).__init__()
self.centralWidget = QtGui.QWidget()
self.setCentralWidget(self.centralWidget)
self.resize(1000, 500)
self.vbox = QtGui.QVBoxLayout()
self.pw = pg.PlotWidget()
self.vbox.addWidget(self.pw)
self.centralWidget.setLayout(self.vbox)
# Update chart
self.timer = pg.QtCore.QTimer()
self.timer.setSingleShot(False)
self.timer.timeout.connect(self.update)
self.timer.start(10)
def update(self):
x = []
y = []
z = []
for i in range(10000):
x.append(i)
y.append(random.uniform(0, 1))
z.append(1 + random.uniform(0, 1))
self.pw.clear()
line_red = pg.PlotCurveItem(x, y, clear=True, pen='r', name='Red')
line_yellow = pg.PlotCurveItem(x, z, clear=True, pen='y', name='Yellow')
self.pw.addItem(line_red)
self.pw.addItem(line_yellow)
self.pw.addLegend()
app = QtGui.QApplication(sys.argv)
ex = Mainwindow(app)
ex.show()
sys.exit(app.exec_())
你有一个XY problem,而不是问How to update plot? questions 如何消除重复的图例?。所以我会指出一个解决潜在问题的方法。
考虑到上述情况,逻辑是只创建一次项目并使用setData()
方法更新信息。
import random
import sys
import pyqtgraph as pg
from pyqtgraph.Qt import QtGui
class Mainwindow(QtGui.QMainWindow):
def __init__(self, parent):
super(Mainwindow, self).__init__()
self.centralWidget = QtGui.QWidget()
self.setCentralWidget(self.centralWidget)
self.resize(1000, 500)
vbox = QtGui.QVBoxLayout(self.centralWidget)
self.pw = pg.PlotWidget()
self.pw.addLegend()
vbox.addWidget(self.pw)
# Update chart
self.timer = pg.QtCore.QTimer()
self.timer.setSingleShot(False)
self.timer.timeout.connect(self.update)
self.timer.start(10)
self.line_red = pg.PlotCurveItem(clear=True, pen="r", name="Red")
self.line_yellow = pg.PlotCurveItem(clear=True, pen="y", name="Yellow")
self.pw.addItem(self.line_red)
self.pw.addItem(self.line_yellow)
def update(self):
x = []
y = []
z = []
for i in range(10000):
x.append(i)
y.append(random.uniform(0, 1))
z.append(1 + random.uniform(0, 1))
self.line_red.setData(x, y)
self.line_yellow.setData(x, z)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
ex = Mainwindow(app)
ex.show()
sys.exit(app.exec_())