双图共享Colorbar及值域问题:不同值域时失效的解决咨询
问题解答
原代码确实不适用于两张图值域不同的通用场景——你最后将第二张图的im对象传给plt.colorbar(),色条自然只会匹配这张图的数值范围。
要让共享色条覆盖两张图的全部值域,可按以下步骤修改:
- 先生成两张图的数据集,计算全局的最小值和最大值
- 在两张图的
imshow()中统一指定vmin和vmax参数,强制它们使用相同的数值区间 - 最后基于任意一个图像对象创建共享色条即可
修改后的代码如下:
import numpy as np import matplotlib.pyplot as plt # Fixing random state for reproducibility np.random.seed(19680801) # 生成两张图的数据 data1 = np.random.uniform(low=0.00001, high=5, size=(100,100)) data2 = np.random.uniform(low=0.3, high=0.6, size=(100,100)) # 计算全局的最小值和最大值 vmin = min(data1.min(), data2.min()) vmax = max(data1.max(), data2.max()) fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12,9)) # 统一指定vmin和vmax,确保两张图用同一颜色映射区间 im1 = ax1.imshow(data1, vmin=vmin, vmax=vmax) im2 = ax2.imshow(data2, vmin=vmin, vmax=vmax) # 基于任意一个图像对象创建共享色条 plt.colorbar(im1, ax=[ax1, ax2], aspect=40) plt.show()
修改后,色条范围会覆盖两张图数据的全部值域,两张图的颜色映射也会基于这个全局区间统一显示,保证数据对比的一致性。
内容的提问来源于stack exchange,提问作者Marco
相关产品推荐
相关产品推荐

