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

如何在Pyqtgraph ColorBarItem的数值旁或上方添加单位字符串?

PyQtGraph ColorBarItem 添加单位的实现方案

针对给ColorBarItem添加单位的需求,以下是两种可行实现方式,均不破坏色条原有功能:

方法1:在所有刻度(含顶部数值)旁显示单位

通过自定义轴刻度的格式化函数,给每个刻度值追加单位:

import pyqtgraph as pg
from pyqtgraph.Qt import QtWidgets, mkQApp

class MyBar(pg.ColorBarItem):
    def __init__(self, *args, **kargs):
        super().__init__(*args,**kargs)
        self.unit = "cm"
        self.display_unit()
    
    def display_unit(self):
        # 获取色条关联的轴对象
        axis = self.getAxis()
        # 自定义刻度文本格式:在原数值后追加单位
        def tick_formatter(value, scale, suffix):
            original_text = pg.AxisItem.defaultTickFormatter(value, scale, suffix)
            return f"{original_text} {self.unit}"
        # 设置自定义格式化函数
        axis.setTickFormatter(tick_formatter)

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        gr_wid = pg.GraphicsLayoutWidget(show=True)
        self.setCentralWidget(gr_wid)
        self.resize(600,500)
        self.show()

        bar = MyBar(values=(-1,1), colorMap=None)
        gr_wid.addItem(bar)

mkQApp("")
main_window = MainWindow()

if __name__ == '__main__':
    pg.exec()

方法2:在色条顶部添加独立的单位标题

通过在ColorBarItem组件内添加文本项,实现顶部居中的单位说明:

import pyqtgraph as pg
from pyqtgraph.Qt import QtWidgets, mkQApp

class MyBar(pg.ColorBarItem):
    def __init__(self, *args, **kargs):
        super().__init__(*args,**kargs)
        self.unit = "cm"
        self.display_unit()
    
    def display_unit(self):
        # 创建单位标题文本,锚点设为底部居中,方便定位到色条顶部
        unit_label = pg.TextItem(f"unit = {self.unit}", anchor=(0.5, 1.0))
        # 获取色条的边界矩形,计算标题的位置(色条顶部中心点)
        bar_bounds = self.boundingRect()
        label_x = bar_bounds.center().x()
        label_y = bar_bounds.top()
        unit_label.setPos(label_x, label_y)
        # 将标题添加到色条组件中
        self.addItem(unit_label)

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        gr_wid = pg.GraphicsLayoutWidget(show=True)
        self.setCentralWidget(gr_wid)
        self.resize(600,500)
        self.show()

        bar = MyBar(values=(-1,1), colorMap=None)
        gr_wid.addItem(bar)

mkQApp("")
main_window = MainWindow()

if __name__ == '__main__':
    pg.exec()

补充说明

  • 方法1会给色条所有刻度值(含顶部最大值、底部最小值)添加单位,适合需要明确每个刻度物理意义的场景。
  • 方法2仅添加独立的单位标题,不修改原有刻度文本,视觉上更简洁。

内容的提问来源于stack exchange,提问作者温泽海

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:22:51