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

Matplotlib多图色条数值不一致问题求助

多子图共用Colorbar并统一数值范围的解决方法

这不是bug,是绘图库(如Matplotlib)的默认行为:当未显式指定统一色标范围时,多子图场景下会默认根据单图数据计算色标,或因共用色标的配置逻辑导致范围被自动调整,从而出现数值截断的情况。

以下是具体解决步骤:

  • 先计算所有子图数据的全局极值
    把三个子图对应的数据集合并,计算全局的最小/最大值,确保色标能覆盖所有数据:

    import numpy as np
    # 假设data_a、data_b、data_c对应三个子图的数据集
    all_data = np.concatenate([data_a.flatten(), data_b.flatten(), data_c.flatten()])
    global_vmin = all_data.min()
    global_vmax = all_data.max()  # 这里会得到你需要的140
    
  • 绘制子图时统一指定色标范围
    使用绘图函数(如imshow)时,显式传入vmin和vmax参数,让所有子图共用同一色标范围:

    import matplotlib.pyplot as plt
    
    fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(12, 4))
    
    # 绘制图A
    im1 = ax1.imshow(data_a, vmin=global_vmin, vmax=global_vmax)
    ax1.set_title('图A')
    
    # 绘制另外两个子图
    im2 = ax2.imshow(data_b, vmin=global_vmin, vmax=global_vmax)
    ax2.set_title('图B')
    
    im3 = ax3.imshow(data_c, vmin=global_vmin, vmax=global_vmax)
    ax3.set_title('图C')
    
    # 添加覆盖所有子图的共用colorbar
    fig.colorbar(im1, ax=[ax1, ax2, ax3])
    plt.tight_layout()
    plt.show()
    
  • 排查自动调整色标的设置
    检查代码中是否存在clim()单独调整子图色标的逻辑,确保所有子图的色标范围保持一致,避免局部范围覆盖全局设置。

按上述方法配置后,colorbar的范围会覆盖所有子图的数值,图A中的140数值对应的颜色会正常显示,不会被截断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 01:05:55