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

如何修改PyQtGraph中GLBarGraphItem的默认颜色

解决GLBarGraphItem设置颜色的问题

你说得对,GLBarGraphItem确实没有内置的setColor()方法,不过我们有几种可靠的方式来设置或修改它的颜色,甚至实现堆叠3D柱状图的多色效果:

方法1:初始化时直接指定颜色

创建GLBarGraphItem的时候,可以直接通过color参数传入颜色值,支持单个颜色(适用于所有柱状图)或者每个柱子单独的颜色:

from pyqtgraph.Qt import QtCore, QtGui
import pyqtgraph.opengl as gl
import numpy as np

app = QtGui.QApplication([])
w = gl.GLViewWidget()
w.opts['distance'] = 100
w.showMaximized()
w.setWindowTitle('pyqtgraph example: GLBarGraphItem Color')

ax = gl.GLAxisItem()
ax.setSize(20,20,20)
w.addItem(ax)

pos = np.mgrid[0:1,0:1,0:1].reshape(3,1,1).transpose(1,2,0)
size = np.empty((1,1,3))
size[...,0:2] = 1
size[...,2] = 5

# 初始化时设置红色(RGBA格式,值范围0-1)
bg = gl.GLBarGraphItem(pos, size, color=(1., 0., 0., 1.))
w.addItem(bg)

if __name__ == '__main__':
    import sys
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtGui.QApplication.instance().exec_()

方法2:动态修改颜色

如果需要在运行时改变颜色,可以直接修改GLBarGraphItem的color属性,然后调用update()方法刷新:

比如在你的代码中,添加如下代码(可以放在事件触发或者定时器逻辑里):

# 修改为绿色,注意颜色数组的形状要和柱状图数量匹配
bg.color = np.array([[[0., 1., 0., 1.]]])
bg.update()

方法3:实现堆叠3D柱状图的多色效果

要做堆叠的3D柱状图,最直接的方式是把每个堆叠层做成独立的GLBarGraphItem,分别设置颜色,然后调整它们的位置让它们堆叠起来:

from pyqtgraph.Qt import QtCore, QtGui
import pyqtgraph.opengl as gl
import numpy as np

app = QtGui.QApplication([])
w = gl.GLViewWidget()
w.opts['distance'] = 100
w.showMaximized()
w.setWindowTitle('pyqtgraph example: Stacked GLBarGraph')

ax = gl.GLAxisItem()
ax.setSize(20,20,20)
w.addItem(ax)

# 底层柱子:位置z=0,高度3,蓝色
pos_bottom = np.mgrid[0:1,0:1,0:1].reshape(3,1,1).transpose(1,2,0)
size_bottom = np.empty((1,1,3))
size_bottom[...,0:2] = 1
size_bottom[...,2] = 3
bar_bottom = gl.GLBarGraphItem(pos_bottom, size_bottom, color=(0., 0., 1., 1.))
w.addItem(bar_bottom)

# 上层柱子:位置z=3(和底层高度一致,实现堆叠),高度2,红色
pos_top = pos_bottom.copy()
pos_top[...,2] = 3  # 把z轴位置设为底层的高度
size_top = np.empty((1,1,3))
size_top[...,0:2] = 1
size_top[...,2] = 2
bar_top = gl.GLBarGraphItem(pos_top, size_top, color=(1., 0., 0., 1.))
w.addItem(bar_top)

if __name__ == '__main__':
    import sys
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtGui.QApplication.instance().exec_()

这样就能得到一个上下两层不同颜色的堆叠3D柱状图啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:03:00