2

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

有许多适合我的颜色图,但我对 cmap 的选择被忽略了。

我需要创建一个自定义的“规范化”吗?如果是这样,每个轮廓是否根据其边缘值着色,然后用相同的颜色填充到下一个较低的值?为什么忽略我的颜色图的症状是......这是在构造过程中被捕获的一些异常并且我的请求被默默地忽略了吗?

我的原始数据有缺失值。我玩过制作大大小小的thise 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)

我希望这个片段至少足以开始对话。

谢谢, 伊莱

4

1 回答 1

5

如果我理解正确,您需要使用级别作为基础将数据重新缩放为颜色,而不是默认的线性缩放。如果这是正确的,那么您需要使用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()

这产生

在此处输入图像描述

将其与默认Normalize行为进行比较:

在此处输入图像描述

希望有帮助。

于 2012-02-17T08:13:50.080 回答