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

pyqtgraph实现matplotlib.pyplot.clim等效色阶限制功能求助

问题原因

两者渲染效果不一致是因为两处代码逻辑偏差:

  • 从matplotlib的hot colormap导出查找表(LUT)时,colormap._lut默认包含256个常规色值 + 3个特殊色值(分别对应超上限、超下限、无效值的显示颜色),全量传入pyqtgraph会导致色阶映射偏移
  • pyqtgraph的setLookupTable方法默认会自动重置图像的levels为LUT适配范围,你提前手动设置的[0,200] levels会被自动覆盖

修正方案

修改pyqtgraph_example函数的LUT导出和设置逻辑即可,修改后代码如下:

def pyqtgraph_example(data):
    colormap = cm.get_cmap("hot")
    colormap._init()
    # 仅取前256个常规色值,排除末尾3个特殊色值
    lut = (colormap._lut[:256] * 255).view(np.ndarray)
    app = pg.mkQApp("Test")

    win = pg.GraphicsLayoutWidget()
    win.show()
    win.setWindowTitle('pyqtgraph example: ImageItem')
    view = win.addViewBox()

    # lock the aspect ratio so pixels are always square
    view.setAspectLocked(True)

    # Create image item
    img = pg.ImageItem()
    view.addItem(img)

    img.setImage(data)
    # 先设置LUT,同时禁止自动更新levels覆盖手动配置
    img.setLookupTable(lut, update_levels=False)
    # 再手动设置levels,等效matplotlib的clim(0,200)
    img.setLevels([0, 200])

    app.exec()

修正后:

  • 像素值<0的区域统一显示hot色阶的最低值(黑色)
  • 像素值在0~200区间的内容线性映射到整个hot色阶
  • 像素值>200的区域统一显示hot色阶的最高值(亮白色)
    和matplotlib的plt.clim(0,200)效果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:09:03