专栏名称: 气象学家
【气象学家】公众号平台为您解读最新气象科研进展、分享气象实用编程技巧、追踪气象即时资讯。欢迎加入气象AI和Python交流群以及气象博士群!与5W+的专业人士一起交流互动!
目录
相关文章推荐
西安头条  ·  不能吃!已接连抢救2人!平时很常见 ·  5 小时前  
逆行的狗  ·  碎片时间刷CIA题-Anki牌组 ·  7 小时前  
逆行的狗  ·  碎片时间刷CIA题-Anki牌组 ·  7 小时前  
半岛网官微  ·  “1个月后才有床位”!这个“羞于启齿”的病, ... ·  21 小时前  
哈密伊州区微生活  ·  穿袜子和不穿袜子睡觉,哪个睡得更香? ·  2 天前  
重庆之声  ·  守护健康 | ... ·  2 天前  
51好读  ›  专栏  ›  气象学家

气象编程 | Python颜色映射的问题与方法

气象学家  · 公众号  ·  · 2024-06-14 11:49

正文

颜色映射的问题与方法

也是之前的几个后台留言,与最近我遇到的一个关于颜色映射的小技巧。

第一个问题:自制颜色条在contourf中不能正确的显示

使用者制作了一个自定义的颜色条,在contourf颜色使用时,给出的参数不全,导致颜色与数值的对应不正确,我们以降水自制色条为例:

color_levels=np.array([0.1,10,25,50,100,250,500])
color_list=['#A6F28F','#3DBA3D','#61BBFF','#0000FF','#FA00FA','#800040']
rain_colormap=mcolors.ListedColormap(color_list)
norm=mcolors.BoundaryNorm(color_levels,rain_colormap.N)

如果仅给出色条,不给levels和norm参数,数值与颜色会被自适应如下所示,显然数值与颜色与我们想象中的不对应。

x=np.arange(-10,10.5,0.5)
y=x
X,Y=np.meshgrid(x,y)
Z=np.sqrt(X**2+Y**2)
pc=plt.contourf(X,Y,Z,cmap=rain_colormap)
plt.colorbar(pc)

若仅给出cmap与norm参数,也会被自适应掉,导致数值与颜色不能正确对应(请注意,如果是pcolormesh、scatter等命令,到这一步必定能对应,因为他们依靠这两个参数就能确定颜色映射)

pc=plt.contourf(X,Y,Z,cmap=rain_colormap,norm=norm)

解决办法就是使用自制颜色条时,需同时给出levels、cmap、norm三个参数:

pc=plt.contourf(X,Y,Z,levels=color_levels,cmap=rain_colormap,norm=norm)

第二个问题:颜色条数值不能正确对应在颜色分界线上

除开上面这种情况会导致错位外,当颜色条包含颜色数量低于等级数量时,会造成刻度落在颜色里面。以NCL的Cat_12颜色条为例,这个颜色条仅含有12种颜色,当我们划分等级超过12时,也会造成颜色映射错乱:

x=np.arange(-10,10.5,0.5)
y=x
X,Y=np.meshgrid(x,y)
Z=np.sqrt(X**2+Y**2)
pc=plt.contourf(X,Y,Z,levels=np.arange(0,105,5),cmap=cmaps.Cat12)
plt.colorbar(pc)

这是因为颜色条颜色数量少于等级,又要强行映射,导致多个等级落入同一个颜色。解决办法就是加入更多的颜色,或者减少等级。







请到「今天看啥」查看全文