使用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
相关产品推荐
相关产品推荐

