python - 在contourf中呈现不同的颜色

标签 python matplotlib contour contourf

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

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

我在matplotlib中使用contourf来完成这项工作,

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. 在我的颜色图中,有一个边界将颜色限制在特殊范围内

  2. 在contourf中,有一个控制相同事物的级别

  3. 在controuf中,有一个vminvmax也控制着同样的东西

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

感谢您查看我的问题。

最佳答案

在这篇文章的帮助下,

matplotlib standard colormap usage

我大概明白了。

整个过程分为两部分。一种是轮廓图,一种是颜色图。

对于颜色图,定义颜色并标准化它们。如果选择此颜色图进行绘图,这部分决定在何时应使用什么颜色。

对于contourf,级别处理您要绘制的部分。看来,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]之间没有数据,所以继续。

当涉及到[1,2]时,根据cmap,中点应该是1.5,它应该是蓝色。并且数据存在于该范围内,因此绘制数据。

到这里,关卡就结束了。尽管数据超过 2,程序仍会停止。 enter image description here

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

现在将边界更改为 [1,2,3,4],级别更改为 [0.6,1.5,2.5,3.5],结果如下: enter image description here

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

关于python - 在contourf中呈现不同的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25394588/

相关文章:

python - 根据一组特定的单词拆分字符串

python - 交替排序字符串列表

python - 如何使用 for 循环将 gridspec 与 nrows 和 ncols 分组

matlab - 如何提高等高线图中线条的质量(平滑度)Matlab

python - 在python opencv中检索伸长特性,应该在什么样的时刻使用?

android - 语音识别减少可能的搜索结果

Python: 'int' 对象在 map.Pool 中不可迭代

python matplotlib.补丁: draw a Circle patch but keep only part of the circle

python - pyplot 轴与图之间的距离

使用 X-Y 坐标数据的 Matlab 2D 轮廓