You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在pyqtgraph中实现matplotlib的'|'符号散点图效果

pyqtgraph实现|竖线散点标记的两种方案

方案1:直接传入字符作为标记(简便)

pyqtgraph原生支持直接传入单个字符作为散点标记样式,无需额外配置,直接调用即可:

import pyqtgraph as pg
import numpy as np

# 初始化画布
plot_widget = pg.plot()
# 生成测试数据
x = np.random.random(100)
y = np.random.random(100)
# 绘制散点,symbol直接指定为'|'
plot_widget.plot(
    x, y,
    pen=None, # 不绘制连线
    symbol='|',
    symbolSize=12, # 调整竖线高度
    symbolPen=pg.mkPen(color='red', width=2) # 调整竖线颜色、粗细
)

方案2:自定义QPainterPath注册符号(高性能,适合大量散点)

如果需要绘制上万级别的散点,自定义路径的渲染性能远高于字符渲染,可提前注册自定义符号到pyqtgraph的符号库:

import pyqtgraph as pg
from pyqtgraph import ScatterPlotItem
from qtpy.QtGui import QPainterPath
import numpy as np

# 定义竖线形状路径
def get_vline_path():
    path = QPainterPath()
    # 路径原点为散点中心,绘制上下长度各0.5单位的竖线
    path.moveTo(0, -0.5)
    path.lineTo(0, 0.5)
    return path

# 将自定义符号注册到pyqtgraph全局符号库,命名为vline
ScatterPlotItem.Symbols['vline'] = get_vline_path()

# 绘图调用
plot_widget = pg.plot()
x = np.random.random(10000)
y = np.random.random(10000)
plot_widget.plot(
    x, y,
    pen=None,
    symbol='vline',
    symbolSize=10,
    symbolPen=pg.mkPen(color='blue', width=1.5)
)

补充说明

  • 两种方案都可以通过symbolSize参数调整竖线的高度,通过symbolPen的width参数调整竖线的粗细,完全匹配matplotlib中|标记的显示效果
  • 大量散点场景优先选择方案2,CPU占用更低,渲染更流畅

内容的提问来源于stack exchange,提问作者Oier Arcelus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 08:36:05