自定义级别的matplotlib contourf图表忽略了颜色映射

3 投票
1 回答
3992 浏览
提问于 2025-04-17 13:09

我正在尝试在matplotlib中创建一个填充等高线图(我用的是Win7,版本1.1.0)。我想突出显示某些值,并且这些值的变化更接近对数而不是线性。

有很多颜色映射(colormap)可以满足我的需求,但我选择的颜色映射似乎被忽略了。

我需要创建一个自定义的“归一化”吗?如果需要的话,每条等高线是根据它的边缘值上色,然后再用相同的颜色填充到下一个较低的值吗?为什么会出现这种情况,导致我的颜色映射被忽略……难道在构建过程中出现了某种异常,而我的请求被默默地忽略了?

我原始的数据中有缺失值。我尝试将这些缺失值设置为nan、很大或很小……在每种情况下,我都尝试了掩盖它们和不掩盖“外部”值。我还尝试了使用默认的级别和归一化的所有组合。

lev = [0.1,0.2,0.5,1.0,2.0,4.0,8.0,16.0,32.0]
norml = colors.normalize(0,32)
cs = plt.contourf(x,z,data,cmap=cm.gray, levels=lev, norm = norml)

我希望这个代码片段足以至少开始讨论。

谢谢,
Eli

1 个回答

8

如果我理解得没错,你需要根据你的数据级别来调整颜色,而不是使用默认的线性缩放。如果是这样的话,你需要使用 colors.BoundaryNorm 作为标准化的依据。下面是一个例子:

x = np.arange(0,8,0.1)
y = np.arange(0,8,0.1)
z = (x[:,None]-4) ** 2 + (y[None,:]-4) ** 2

lev = [0.1,0.2,0.5,1.0,2.0,4.0,8.0,16.0,32.0]
norml = colors.BoundaryNorm(lev, 256)
cs = plt.contourf(x, y, z, cmap = cm.jet, levels = lev, norm = norml)
plt.show()

这样做的结果是

enter image description here

再看看默认的 Normalize 的效果:

enter image description here

希望这对你有帮助。

撰写回答