如何在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,提问作者温泽海
相关产品推荐
相关产品推荐

