python ---关于colormap,polormesh,colorbar

1、归一化:归一化后的值可以直接传给 colormap,以得到画图用的颜色

Normalize:各种二维绘图函数在进行归一化时都默认使用 Normalize 类。给定参数 vmin 和 vmax,它会按照线性关系,将原始数据 x 映射为 y。

LogNorm:LogNorm 能将 [vmin, vmax] 范围内的 x 的对数线性映射到 [0.0, 1.0] 上
BoundaryNorm:
参数 boundaries 为我们给出的这些 bin 的边缘数值,要求单调递增;
ncolors 则是我们希望与之对应的 colormap 中颜色的数目(即 cmap.N)

2、选colormap的映射值
这里暂时选取jet值,后续讲解如何自己制作colormap

# 生成测试数据.
x = np.linspace(0, 10, 100)
y = np.linspace(0, 10, 100)
X, Y = np.meshgrid(x, y)
Z = 1E3 * np.exp(-(np.abs(X - 5)**2 + np.abs(Y - 5)**2))

#首先绘制一个画布
fig ,ax = plt.subplots(figsize=(8,6))

#第二步:
# 选择归一化:
# 第一种,默认是线性,可以直接在pcolormesh中设置vmin,vmax
# 第二种,设置成为对数映射,norm = colors.LogNorm(vmin=1E-3, vmax=1E3),注意,若在pcolormesh中给定了norm,就不能再指定vmin和vmax了.
# 第三种:设置成为BoundaryNorm,需给出两个参数,


# 选择colormap

cmap = cm.jet

#第三步:
#pocormesh:创建具有非规则矩形网格的伪彩色图
im = ax.pcolormesh(Z,cmap=cmap)

#第四步:
#colorbar:显示色阶的颜色栏
fig.colorbar(im)

plt.show()


效果图如下:

在这里插入图片描述

三种归一化结果如下:

# 生成测试数据.
x = np.linspace(0, 10, 100)
y = np.linspace(0, 10, 100)
X, Y = np.meshgrid(x, y)
Z = 1E3 * np.exp(-(np.abs(X - 5)**2 + np.abs(Y - 5)**2))

#首先绘制一个画布
fig ,axs = plt.subplots(2,2,figsize=(8,8))

cmap = cm.jet
im = axs[0,0].pcolormesh(Z,cmap=cmap)
axs[0,0].set_title('线性映射')
fig.colorbar(im)


norm_L = colors.LogNorm(vmin=1E-3,vmax=1E3)
im1 = axs[0,1].pcolormesh(Z,cmap=cmap,norm=norm_L)
fig.colorbar(im1)
# fig.colorbar(im1,ax=axs[0,1])

axs[0,1].set_title('对数映射')


bounds = [1,20,40,50,60,70,70,90,100]
nbins = len(bounds) -1
norm_B = colors.BoundaryNorm(boundaries=bounds,ncolors=cmap.N)
#norm_B = colors.BoundaryNorm(boundaries=bounds,ncolors=nbins)#注意,本来这里应该为cmap.N,但cmap不是离散取值
im2 =axs[1,0].pcolormesh(Z,cmap=cmap,norm=norm_B)
fig.colorbar(im2)
axs[1,0].set_title('bound映射')



结果如下:
在这里插入图片描述
注意看:
这里的颜色条没有一一对齐,问题出现在colorbar的ax参数,
因为colorbar也相当于一个轴,只需要在对应的colorbar 添加这样ax参数就可以了:fig.colorbar(im2,ax=axs[1,0])

结果如下:
在这里插入图片描述

3、colormap 有两个子类:一个是Listedcolormap
一个是Linearsegmentcolormap

之前直接
cmap = cm.jet。采用的是颜色库里面有的,相应的还有’viridis’, ‘plasma’, ‘inferno’, ‘magma’, 'cividis’等,具体的见官网;

网址:
色彩介绍–官网matplotlib

而Listedcolormap无colors属性,不能直接列出这N个颜色的RGB值,需要利用十六进制或者rgb值来创建一个list的colormap

如下;

cmap = ['#F8F8FF','#FFC0CB','#DC143C',\
        '#0000CD','#DB7093','#FF69B4',\
        '#FF1493','#C71585','#DA70D6']

cmap_L = colors.ListedColormap(cmap)
bounds = [1,20,40,50,60,70,70,90,100]
# nbins = len(bounds) -1
norm_B = colors.BoundaryNorm(boundaries=bounds,ncolors=cmap_L.N)
#norm_B = colors.BoundaryNorm(boundaries=bounds,ncolors=nbins)#注意,本来这里应该为cmap.N,但cmap不是离散取值
im2 =axs.pcolormesh(Z,cmap=cmap_L,norm=norm_B)
fig.colorbar(im2,ax=axs)
axs.set_title('bound映射')

结果如下:
在这里插入图片描述

fig, ax = plt.subplots(1,1, figsize=(4,4))
ax.pcolormesh(data)
#data指的是反射率第一层仰角的数据

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值