我想呈现一个二维矩阵,如下所示:
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)
现在问题来了,设置颜色的方式有很多种,我想知道哪个负责什么,谁有优先权。
在我的颜色图中,有一个
边界
将颜色限制在特殊范围内在contourf中,有一个控制相同事物的
级别
在controuf中,有一个
vmin
和vmax
也控制着同样的东西
我知道 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,程序仍会停止。
如果我将级别更改为[0,1,2,3,4,5,6,7],结果如下。所以当级别超过cmap时,超过的部分会显示相同的颜色。在这种情况下,当值超过 3 时,处理超过 3 的值的颜色图中没有定义颜色,因此它保持与范围 [2,3] 中相同的颜色。
现在将边界更改为 [1,2,3,4],级别更改为 [0.6,1.5,2.5,3.5],结果如下:
所以,第一个区间[0.6,1.5],中点是1.05,根据cmap,它应该是红色的。其余部分遵循相同的规则。
关于python - 在contourf中呈现不同的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25394588/