我正在使用 pyqtgraph,我想在 InfiniteLines 的图例中添加一个项目。
我改编了示例代码来演示:
# -*- coding: utf-8 -*-
"""
Demonstrates basic use of LegendItem
"""
import initExample ## Add path to library (just for examples; you do not need this)
import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui
plt = pg.plot()
plt.setWindowTitle('pyqtgraph example: Legend')
plt.addLegend()
c1 = plt.plot([1,3,2,4], pen='r', name='red plot')
c2 = plt.plot([2,1,4,3], pen='g', fillLevel=0, fillBrush=(255,255,255,30), name='green plot')
c3 = plt.addLine(y=4, pen='y')
# TODO: add legend item indicating "maximum value"
## Start Qt event loop unless running in interactive mode or using pyside.
if __name__ == '__main__':
import sys
if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
QtGui.QApplication.instance().exec_()
我得到的结果是:
如何添加适当的图例项?
如果使用“name”参数创建项目,pyqtgraph 会自动将项目添加到图例中。上述代码中唯一需要的调整如下:
c3 = plt.plot (y=4, pen='y', name="maximum value")
一旦您为 pyqtgraph 提供了曲线名称,它就会自行创建相应的图例项。
在创建曲线之前调用
plt.addLegend()
很重要。
对于此示例,您可以创建一个具有正确颜色的空 PlotDataItem 并将其添加到图例中,如下所示:
style = pg.PlotDataItem(pen='y')
plt.plotItem.legend.addItem(l, "maximum value")
我对接受的答案不满意
也许它曾经在 2015 年工作过,但使用我的版本(pyqtgraph==0.13.3):
c3 = plt.plot(y=4, pen='y', name="maximum value")
扔一个
TypeError
和
c3 = plt.addLine(y=4, pen="y", name="maximum value")
不会向图例添加任何内容。
c3 = plt.addLine(y=4, pen="y", label="maximum value")
addLine
生成不合规的 InfiniteLine
。然而,你可以用相对较少的努力猴子修补它:import pyqtgraph as pg
plt = pg.plot()
plt.setWindowTitle("pyqtgraph example: Legend")
legend = plt.addLegend()
c1 = plt.plot([1, 3, 2, 4], pen="r", name="red plot")
c2 = plt.plot(
[2, 1, 4, 3], pen="g", fillLevel=0, fillBrush=(255, 255, 255, 30), name="green plot"
)
c3 = plt.addLine(y=4, pen="y", name="maximum value")
# legend.addItem expect fist argument to have opts dict
c3.opts = {"pen": "y"}
legend.addItem(c3, "test")
pg.exec()