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

如何在matplotlib的contourf中实现特定数值与固定颜色的一致映射?

解决方法

核心是自定义离散颜色映射与归一化规则,无需在数据中覆盖所有目标数值即可固定数值与颜色的对应关系,适配任意形状的数值区域。

修改后完整可运行代码

import numpy as np
from matplotlib import pyplot as plt
from matplotlib.colors import ListedColormap, BoundaryNorm

# 1. 自定义颜色与数值对应规则:0→绿色、1→蓝色、2→红色
color_list = ['green', 'blue', 'red']
# 数值区间边界,对应0在(-0.5,0.5]、1在(0.5,1.5]、2在(1.5,2.5]
value_bins = [-0.5, 0.5, 1.5, 2.5]
# 生成自定义色卡与归一化规则
custom_cmap = ListedColormap(color_list)
custom_norm = BoundaryNorm(value_bins, ncolors=custom_cmap.N)

grid_x = np.linspace(-5, 5, 500)
grid_y = np.linspace(-5, 5, 500)
xx, yy = np.meshgrid(grid_x, grid_y)

fig, ax = plt.subplots(2)
rand1 = np.ones((500,500))
rand1[:, 250:] = 2
# 绘图时指定自定义cmap、norm和levels
ax[0].contourf(xx, yy, rand1, levels=value_bins, alpha=.3, cmap=custom_cmap, norm=custom_norm)

rand2 = np.zeros((500,500))
rand2[:, 200:250] = 1
rand2[:,250:] = 2
ax[1].contourf(xx, yy, rand2, levels=value_bins, alpha=.3, cmap=custom_cmap, norm=custom_norm)

plt.show()

方案说明

  • ListedColormap 用于定义离散的颜色序列,顺序和你需要的数值顺序一一对应
  • BoundaryNorm 用于建立数值区间到色卡位置的固定映射,不会随输入数据的最值变化而改变
  • 绘图时传入与边界匹配的levels参数,确保contourf的渲染区间和归一化规则完全对齐
  • 该方案不要求单张图的数据覆盖所有目标数值,也不限制数值区域的形状,只要数值在你定义的区间内,颜色对应关系就会保持统一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:24:07