如何为Matplotlib imshow的两幅图表设置统一颜色取值范围?
统一Matplotlib imshow图表颜色取值范围的实现方法
要让两幅imshow图表使用统一的颜色映射(相同数值对应相同颜色),核心是为两个图表设置相同的颜色取值范围,可以通过以下步骤实现:
1. 确定全局数值范围
先计算两组数据的最小值(vmin)和最大值(vmax),确保这个范围覆盖两组数据的所有值。
2. 在imshow中指定vmin和vmax
调用imshow()时传入vmin和vmax参数,强制两个图表使用相同的颜色映射区间。
完整示例代码
import matplotlib.pyplot as plt import numpy as np # 定义两组数据集 data1 = np.array([[[7,7,7,7,7,7,7,7,7,7,7],[11,11,11,11,11,11,11,11,11,11,11],[15,15,15,15,15,15,15,15,15,15,15],[19,19,19,19,19,19,19,19,19,19,19],[23,23,23,23,23,23,23,23,23,23,23],[27,27,27,27,27,27,27,27,27,27,27],[31,31,31,31,31,31,31,31,31,31,31],[35,35,35,35,35,35,35,35,35,35,35],[39,39,39,39,39,39,39,39,39,39,39],[43,43,43,43,43,43,43,43,43,43,43],[47,47,47,47,47,47,47,47,47,47,47]]]) data2 = np.array([[[10,19,26,28,33,35,35,37,40,42,42],[10,19,26,28,33,35,35,37,40,42,42],[10,19,26,28,33,35,35,37,40,42,42],[10,19,26,28,33,35,35,37,40,42,42],[10,19,26,28,33,35,35,37,40,42,42],[10,19,26,28,33,35,35,37,40,42,42],[10,19,26,28,33,35,35,37,40,42,42],[10,19,26,28,33,35,35,37,40,42,42],[10,19,26,28,33,35,35,37,40,42,42],[10,19,26,28,33,35,35,37,40,42,42],[10,19,26,28,33,35,35,37,40,42,42]]]) # 计算全局最小、最大值 all_data = np.concatenate([data1, data2]) vmin = all_data.min() vmax = all_data.max() # 绘制第一幅图 fig1, ax1 = plt.subplots() im1 = ax1.imshow(data1[0], vmin=vmin, vmax=vmax) ax1.invert_yaxis() ax1.set_title("bit shifting") fig1.colorbar(im1) fig1.tight_layout() # 绘制第二幅图 fig2, ax2 = plt.subplots() im2 = ax2.imshow(data2[0], vmin=vmin, vmax=vmax) ax2.invert_yaxis() ax2.set_title("另一组数据") fig2.colorbar(im2) fig2.tight_layout() plt.show()
关键说明
np.concatenate([data1, data2]):合并两组数据,快速计算全局最小/最大值,确保颜色范围覆盖所有数据点。vmin和vmax参数:强制imshow使用指定数值区间做颜色映射,两组图表共用这两个值后,相同数值会对应完全一致的颜色。- 添加
colorbar:直观展示颜色与数值的对应关系,验证统一映射的效果。
如果数据来自文件,只需将data1和data2的定义替换为对应的文件读取逻辑即可,核心逻辑保持不变。
内容的提问来源于stack exchange,提问作者Bryn
相关产品推荐
相关产品推荐

