You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在PyQtGraph折线图的指定位置绘制标记点?

在PyQtGraph中仅为折线特定位置添加标记点的解决方案

这个问题我之前也碰到过!PyQtGraph里如果直接用plot()的symbol系列参数,确实会给整条曲线的所有数据点都加上标记。要实现只在特定位置画标记点,核心思路就是把折线本身和标记点分开绘制,给你两种实用的实现方式:

方法一:两次调用plot()分别绘制折线和标记点

这种方法最直观,适合静态标记的场景:

  1. 先调用plot()绘制纯折线(不要加任何symbol相关参数)
  2. 再单独调用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管理标记点

如果之后需要动态添加、删除或修改标记点,推荐用这种方式,灵活性更高:

  1. 先绘制基础折线
  2. 创建ScatterPlotItem对象,设置好标记的样式
  3. 通过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

火山引擎 最新活动