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

如何调整Matplotlib等高线图颜色提升可读性(不修改刻度)

解决Matplotlib等高线图负数区间颜色单调的问题

不用修改现有levels数组,你可以通过**自定义颜色映射(colormap)和边界归一化(BoundaryNorm)**来让-5到0区间的颜色更丰富,具体实现如下:

  • 自定义色彩分配:给-5到0的4个刻度间隔(-5→-3、-3→-2、-2→-1、-1→0)分别指定不同颜色,正数区间保留适配的色彩,确保每个区间都有独立视觉区分。
  • 绑定刻度与颜色:用ListedColormap和BoundaryNorm让每个刻度区间对应指定颜色,避免默认配色在数值密集区间色彩单一。

示例代码:

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

# 假设X、Y、Z为已生成的绘图数据
# X, Y = np.meshgrid(np.linspace(-5,5,100), np.linspace(-5,5,100))
# Z = ... 你的数值数据

levels = [-5, -3,-2,-1, 0,1, 2,5,10,17.5]

# 自定义颜色组:前4个对应负数区间,后5个对应正数区间
colors = [
    '#00264d', '#0059b3', '#66a3ff', '#cce0ff',  # -5到0的区间色彩
    '#fff2cc', '#ffd966', '#f7941d', '#e06666', '#cc0000'  # 0到17.5的区间色彩
]
cmap = ListedColormap(colors)
# 绑定刻度与颜色映射,确保每个区间匹配对应色彩
norm = BoundaryNorm(levels, ncolors=len(colors))

fig, ax1 = plt.subplots()
cax = ax1.contourf(X, Y, Z, levels=levels, cmap=cmap, norm=norm)
# 同步显示原刻度的颜色条
plt.colorbar(cax, ticks=levels)
plt.show()

额外技巧:如果不想手动选色,可基于现有色卡扩展色彩:

cmap = plt.get_cmap('coolwarm', len(levels)-1)
# 提取色卡颜色并替换负数区间部分
new_colors = cmap(np.linspace(0,1,len(levels)-1))
# 给前4个负数区间分配更丰富的冷色调
new_colors[0:4] = plt.get_cmap('Blues')(np.linspace(0.2,0.8,4))
cmap = ListedColormap(new_colors)
norm = BoundaryNorm(levels, ncolors=len(new_colors))

处理后,-5到0的每个子区间都会有不同色彩,同时完全保留原有的刻度设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:02:43