如何在Python中对矩阵生成的Colormap进行归一化(轴范围0-3)?
将Colormap归一化到0-3范围的实现方案
你可以通过以下两种方式实现将Colormap的归一化范围固定为0到3:
方法一:直接固定颜色映射范围
这种方式会将所有数据映射到0-3区间,数据值超过3的会使用Colormap的最高色,低于0的使用最低色,适合需要强制颜色条范围的场景。
修改后的完整代码:
import numpy as np import matplotlib.pyplot as plt from matplotlib import colors # 加载矩阵文件 p = np.loadtxt('matrix300.txt') # 自定义Colormap cmap = colors.ListedColormap(['yellow', 'white'], name='Gamma=1') # 设置归一化范围为0到3 norm = colors.Normalize(vmin=0, vmax=3) # 绘制图像并应用归一化规则 img = plt.imshow(p, interpolation='nearest', origin='lower', cmap=cmap, norm=norm) # 添加匹配范围的颜色条 plt.colorbar(img) plt.xlabel("h_0") plt.ylabel("h") plt.show()
方法二:先将数据线性缩放到0-3区间
如果需要让原数据的最小值对应0、最大值对应3,先对数据做线性缩放处理:
import numpy as np import matplotlib.pyplot as plt from matplotlib import colors p = np.loadtxt('matrix300.txt') # 线性缩放数据到0-3范围 p_scaled = (p - p.min()) / (p.max() - p.min()) * 3 cmap = colors.ListedColormap(['yellow', 'white'], name='Gamma=1') # 绘制时可直接指定vmin/vmax确保颜色条范围 img = plt.imshow(p_scaled, interpolation='nearest', origin='lower', cmap=cmap, vmin=0, vmax=3) plt.colorbar(img) plt.xlabel("h_0") plt.ylabel("h") plt.show()
关键修改点说明
- 移除了重复的
matplotlib.colors导入,简化代码结构 - 替换原
BoundaryNorm为Normalize(vmin=0, vmax=3),实现连续的0-3范围归一化 - 颜色条无需再手动指定边界,直接关联绘制的
img对象即可自动匹配范围
内容的提问来源于stack exchange,提问作者user18624758
相关产品推荐
相关产品推荐

