2

我想呈现一个二维矩阵,如下所示:

2 3 4 5 6 3
1 2 2 4 5 5
1 2 2 2 2 4

我使用contourfinmatplotlib来完成工作,

cmap = colors.ListedColormap(['0.75', (0.2, 0.3, 0.5), 'r', 'b', 'g', 'c'])
bounds = [-0.5, 0.5, 1.5, 2.5, 3.5, 4.5]
norm = colors.BoundaryNorm(bounds, cmap.N)

map = plt.contourf(x, y, Cordi, cmap=cmap, norm=norm, 
                   level=[1,2,3,4,5], vmin=1, vmax=6)

现在问题来了,设置颜色的方法有很多,我想知道哪个负责什么,谁有优先权。

  1. 在我的颜色图中,有一个bounds将颜色限制在特殊范围内

  2. 在contourf中,有一个level控制同样的东西

  3. 相反,有一个vminandvmax也控制着同样的事情

我知道imshow更适合我的情况,并且已经成功运行。但是现在说到contourf,里面有一个level,这让我很困惑。

感谢您查看我的问题。

4

1 回答 1

2

在这篇文章的帮助下,

matplotlib 标准颜色图使用

我有点明白。

整个过程有两个部分。一个是contourf,一个是colormap。

对于颜色图,定义颜色并对其进行规范化。这部分决定了在什么时候应该使用什么颜色,如果选择这个颜色图来绘制。

对于 contourf,level 处理您要绘制的部分。看来,vmin 和 vmax 在这部分用处不大。或者也许我还没有找到一些。

例如,

首先定义一个cmap

import matplotlib.pyplot as plt
from matplotlib import colors
cmap1 = plt.cm.jet

cmap = colors.ListedColormap(['r','b','g'])
bounds = [0,1,2,3]
norm = colors.BoundaryNorm(bounds, cmap.N)

a = plt.contourf([[1, 1], [3, 3],[5,5]], cmap = cmap, \
norm = norm, levels = [0,1,2])
plt.colorbar()

plt.show()

这意味着在 [0,1] 之间,颜色为红色,在 [1,2] 之间,颜色为蓝色,依此类推。

然后,如果你先在contourf中定义一个级别,例如[0,1,2],程序会根据你的级别将你的数据分类到不同的部分。在这个程序中只关心 [0,1,2],因为你之前已经调平了它。

而在[0,1]之间,中点是0.5,参考cmap,应该是红色的,但是看数据,[0,1]之间没有数据,所以继续。

根据cmap,当谈到[1,2]时,中点应该是1.5,应该是蓝色的。并且数据存在于这个范围内,所以绘制了数据。

到这里,关卡就结束了。程序停止,尽管您有超过 2 的数据。 在此处输入图像描述

如果我将级别更改为 [0,1,2,3,4,5,6,7],结果如下。所以当level超过cmap时,超出的部分会显示相同的颜色。在这种情况下,当值超过 3 时,在处理超过 3 的值的颜色图中没有定义颜色,因此它与 [2,3] 范围内的颜色保持相同。 在此处输入图像描述

现在将 bounds 更改为 [1,2,3,4] 并将 level 更改为 [0.6,1.5,2.5,3.5],结果如下, 在此处输入图像描述

所以,第一个区间,[0.6,1.5],中点是1.05,根据cmap,应该是红色的。其余部分遵循相同的规则。

于 2014-08-20T23:47:34.263 回答