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

Matplotlib pyplot contourf未按自定义层级正确着色问题求助

解决matplotlib contourf自定义层级与色图的问题

问题原因分析

  1. 层级外数值显示白色:你设置了extend='neither',这会让matplotlib不对超出层级范围的数值着色,直接显示白色。
  2. 部分颜色看似缺失:你的测试数据是线性范围,导致部分层级间隔(如-0.1到0.1)对应的区域非常狭窄,肉眼难以分辨,并非颜色未被使用。

解决方案

1. 修正extend参数

将extend='neither'改为extend='both',让超出最低层级的数值使用色图的第一个颜色,超出最高层级的数值使用色图的最后一个颜色。

2. 使用更直观的测试数据

替换线性测试数据为网格数据,确保每个层级间隔对应明显的区域,方便观察所有颜色。

修正后的代码

import numpy as np
import matplotlib.pyplot as plt

# 定义10个层级边界,生成9个间隔
levels = np.array([-4, -2, -1, -0.5, -0.1, 0.1, 0.5, 1, 2, 4])

# 创建与间隔数匹配的9色自定义色图
cmap = plt.get_cmap('BrBG', len(levels) - 1)

# 生成能清晰展示所有层级的测试数据
x = np.linspace(-5, 5, 200)
y = np.linspace(-5, 5, 200)
X, Y = np.meshgrid(x, y)
Z = np.zeros_like(X)

# 为每个层级间隔分配明确的数值区域
Z[X < -4] = -5
Z[(X >= -4) & (X < -2)] = -3
Z[(X >= -2) & (X < -1)] = -1.5
Z[(X >= -1) & (X < -0.5)] = -0.75
Z[(X >= -0.5) & (X < -0.1)] = -0.3
Z[(X >= -0.1) & (X < 0.1)] = 0
Z[(X >= 0.1) & (X < 0.5)] = 0.3
Z[(X >= 0.5) & (X < 1)] = 0.75
Z[(X >= 1) & (X < 2)] = 1.5
Z[(X >= 2) & (X < 4)] = 3
Z[X >= 4] = 5

# 使用extend='both'处理层级外数值
p = plt.contourf(X, Y, Z, cmap=cmap, levels=levels, extend='both')
plt.colorbar(p, ticks=levels)  # 色图显示所有层级刻度
plt.show()

关键说明

  • extend='both':自动将色图延伸至层级外的数值,避免白色区域。
  • 色图数量与层级间隔数一致:len(levels)-1确保每个间隔对应唯一颜色。
  • 网格测试数据:让每个层级间隔的区域足够明显,便于验证所有颜色是否生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 05:42:07