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

使用pyqtgraph字典配置散点图时符号为何从叉号变方块?

PyQtGraph散点图用字典配置点属性时符号变为方块的原因及解决方法

问题描述

直接通过位置列表创建散点图时,叉号符号显示正常:

scatter = pg.ScatterPlotItem([1,2,3,4], [1,2,3,4], symbol='x', brush='r', size=10)

但为了单独控制每个点颜色,改用字典列表配置每个点属性后,所有符号变成了方块:

import sys
from PyQt5 import QtWidgets
import pyqtgraph as pg

app = QtWidgets.QApplication(sys.argv)

graph = pg.PlotWidget()

orderScatterDict = []

for i in range(4):
    color = 'b'
    if i % 2 == 1:
        color = 'r'
    spot_dic = {'pos': (i, i), 'size': 10, 'symbol':'x',
                'pen': {'color': color, 'width': 10}}
    orderScatterDict.append(spot_dic)

scatter = pg.ScatterPlotItem()
graph.addItem(scatter)
scatter.setData(orderScatterDict)
graph.show()
app.exec_()

原因分析

PyQtGraph中,'x'这类符号属于仅由pen(笔触)绘制的空心符号,不需要brush(填充)。但当使用字典配置单个点属性时,默认会自动为spot添加默认的brush填充,填充会覆盖掉pen绘制的叉号,最终显示为方块。

解决方法

在每个spot的字典配置中,明确设置'brush': None,禁用填充即可:

修改后的代码:

import sys
from PyQt5 import QtWidgets
import pyqtgraph as pg

app = QtWidgets.QApplication(sys.argv)

graph = pg.PlotWidget()

orderScatterDict = []

for i in range(4):
    color = 'b'
    if i % 2 == 1:
        color = 'r'
    # 添加brush: None禁用填充
    spot_dic = {'pos': (i, i), 'size': 10, 'symbol':'x',
                'pen': {'color': color, 'width': 10},
                'brush': None}
    orderScatterDict.append(spot_dic)

scatter = pg.ScatterPlotItem()
graph.addItem(scatter)
scatter.setData(orderScatterDict)
graph.show()
app.exec_()

这样就能正常显示不同颜色的叉号符号了。

内容的提问来源于stack exchange,提问作者Tommy Orok

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 05:15:35