如何设置PyQtGraph ImageView直方图LUT的默认渐变颜色?
如何修改PyQtGraph ImageView的默认颜色渐变样式?
PyQtGraph的ImageView组件自带的直方图支持两个核心功能:
- 通过拖动区域定义图像的明暗级别范围
- 编辑颜色渐变生成颜色查找表(LUT),为图像添加伪彩色效果
默认情况下该直方图的颜色渐变是黑白样式,我们可以通过两种方式修改默认渐变:使用内置预设渐变,或者自定义渐变。
方法1:使用PyQtGraph内置预设渐变
PyQtGraph内置了多种常用颜色渐变(如viridis、plasma、inferno等),可直接调用并设置给ImageView的直方图:
import numpy as np import pyqtgraph as pg data = np.array( [ [0.0, 0.0, 0.5, 2.5, 2.5, 3.5], [2.0, 2.0, 1.5, 0.5, 2.5, 3.5], [2.0, 2.0, 2.0, 2.5, 0.5, 1.5], [3.0, 3.0, 2.5, 3.0, 1.5, 0.5], [3.0, 3.0, 3.0, 4.5, 1.5, 1.5], ] ) app = pg.Qt.mkQApp("Example Cost Matrix Visualisation") plot = pg.PlotItem() plot.setTitle("Cost Matrix") plot.setLabel(axis="top", text="Y Signal") plot.setLabel(axis="left", text="X Signal") im = pg.ImageItem(data, axisOrder="row-major") imv = pg.ImageView(imageItem=im, view=plot) # 调用内置的viridis渐变 cmap = pg.colormap.get("viridis") imv.ui.histogram.gradient.setColorMap(cmap) imv.show() imv.setHistogramLabel("Cost Matrix Histogram") app.exec()
方法2:自定义颜色渐变
如果内置渐变不符合需求,可手动创建自定义渐变,添加多组颜色控制点:
import numpy as np import pyqtgraph as pg from pyqtgraph import GradientWidget data = np.array( [ [0.0, 0.0, 0.5, 2.5, 2.5, 3.5], [2.0, 2.0, 1.5, 0.5, 2.5, 3.5], [2.0, 2.0, 2.0, 2.5, 0.5, 1.5], [3.0, 3.0, 2.5, 3.0, 1.5, 0.5], [3.0, 3.0, 3.0, 4.5, 1.5, 1.5], ] ) app = pg.Qt.mkQApp("Example Cost Matrix Visualisation") plot = pg.PlotItem() plot.setTitle("Cost Matrix") plot.setLabel(axis="top", text="Y Signal") plot.setLabel(axis="left", text="X Signal") im = pg.ImageItem(data, axisOrder="row-major") imv = pg.ImageView(imageItem=im, view=plot) # 创建自定义渐变:从蓝色过渡到黄色再到红色 gradient = GradientWidget() gradient.setGradient([ (0.0, (0, 0, 255)), # 数据最小值对应蓝色 (0.5, (255, 255, 0)), # 数据中间值对应黄色 (1.0, (255, 0, 0)) # 数据最大值对应红色 ]) imv.ui.histogram.gradient.setGradient(gradient.getGradient()) imv.show() imv.setHistogramLabel("Cost Matrix Histogram") app.exec()
关键说明
- 核心操作是通过
imv.ui.histogram.gradient访问直方图的渐变组件,再调用setColorMap()(内置色图)或setGradient()(自定义渐变)修改默认样式。 - 自定义渐变的控制点格式为
(位置比例, RGB颜色元组),位置比例范围0-1,对应图像数据的最小值到最大值。
内容的提问来源于stack exchange,提问作者Kyle F. Hartzenberg
相关产品推荐
相关产品推荐

