如何在PyQtGraph折线图的指定位置绘制标记点?
在PyQtGraph中仅为折线特定位置添加标记点的解决方案
这个问题我之前也碰到过!PyQtGraph里如果直接用plot()的symbol系列参数,确实会给整条曲线的所有数据点都加上标记。要实现只在特定位置画标记点,核心思路就是把折线本身和标记点分开绘制,给你两种实用的实现方式:
方法一:两次调用plot()分别绘制折线和标记点
这种方法最直观,适合静态标记的场景:
- 先调用
plot()绘制纯折线(不要加任何symbol相关参数) - 再单独调用
plot(),只传入需要标记的点的坐标,同时设置symbol样式,并且把pen设为None避免画出不必要的连线
示例代码:
import pyqtgraph as pg from PyQt5.QtWidgets import QApplication app = QApplication([]) win = pg.GraphicsLayoutWidget() p1 = win.addPlot(title="折线+特定标记点") # 1. 绘制基础折线,只显示线条 x_data = [0, 1, 2, 3, 4] y_data = [0, 1, 2, 3, 4] p1.plot(x_data, y_data, pen=(2,5), name="trade") # 2. 单独绘制目标标记点(这里以(1,1)为例) # 仅传入需要标记的点的坐标,pen=None表示不绘制点之间的连线 p1.plot([1], [1], symbolBrush=2, symbolSize=10, pen=None) win.show() app.exec_()
方法二:使用ScatterPlotItem管理标记点
如果之后需要动态添加、删除或修改标记点,推荐用这种方式,灵活性更高:
- 先绘制基础折线
- 创建
ScatterPlotItem对象,设置好标记的样式 - 通过
addPoints()方法添加需要标记的坐标,最后把这个散点项添加到绘图区域
示例代码:
import pyqtgraph as pg from PyQt5.QtWidgets import QApplication app = QApplication([]) win = pg.GraphicsLayoutWidget() p1 = win.addPlot(title="折线+动态标记点") # 1. 绘制基础折线 x_data = [0, 1, 2, 3, 4] y_data = [0, 1, 2, 3, 4] p1.plot(x_data, y_data, pen=(2,5), name="trade") # 2. 创建散点标记项并添加目标点 scatter_item = pg.ScatterPlotItem(symbolBrush=2, symbolSize=10) # 可以一次性添加多个点,比如pos=[(1,1), (3,3)] scatter_item.addPoints(pos=[(1,1)]) p1.addItem(scatter_item) win.show() app.exec_()
两种方法都能完美实现你要的效果:折线正常显示,只有指定的位置出现标记点。如果是简单的静态需求,方法一足够;如果涉及动态操作标记点,方法二更合适。
内容的提问来源于stack exchange,提问作者Y.S




