python 自定义图例可能遇到的问题

一、颜色偏移问题

要在 Python 中创建自定义的 colormap(cmap),可以使用matplotlib.colors.LinearSegmentedColormap 类。这个类允许您创建由多个颜色组成的线性分段色带。
默认情况下,LinearSegmentedColormap 类使用线性插值方法,这可能会导致颜色偏移。即使已经设置了 gamma=1.0,依旧会有颜色偏移。
以下代码可解决自定义图例颜色偏移的问题

import matplotlib.colors as colors
import matplotlib.pyplot as plt
# 创建国家气候中心降水量色带
rain_colors = ['#ffffb4', '#8cc88c', '#31ff32', '#00fefe', '#0195ff', '#0000fe', '#ff00fe', '#7c013f']
cmaps_pre = colors.LinearSegmentedColormap.from_list('mycmap', rain_colors, len(rain_colors))  
level = [0, 50, 100, 200, 500, 1000, 1500, 2000]
norm = colors.BoundaryNorm(level, cmaps_pre.N - 1)
pic = plt.contourf(olon, olat, oz, level, cmap=cmaps_pre, norm=norm)#如果加extend参数会导致小bug,上端或下端颜色会出现问题

二、extend=‘both’ 图例两端颜色重复问题

如果按下面代码生成两端箭头的图例,有可能会出现下图错误。

tem_anomaly_color = ['#0D0883', '#0500fa', '#009afc', '#00fefe', '#c1fdfe', '#ffff83', '#ffb574', '#f98681', '#fb0200', '#94160a']
cmaps_tem_anomaly = colors.LinearSegmentedColormap.from_list('mycmap', tem_anomaly_color, 10)  # 气温生成色带
level = [-2, -1.5, -1, -0.5, 0, 0.5, 1, 1.5, 2]
pic = plt.contourf(olon, olat, oz, level, cmap=cmaps_tem_anomaly, extend='both')
cbar = plt.colorbar(pic, cax=position, orientation='vertical', format='%.1f', extendfrac='auto')  # 图例

在这里插入图片描述

解决方法:

tem_anomaly_color = ['#0D0883', '#0500fa', '#009afc', '#00fefe', '#c1fdfe', '#ffff83', '#ffb574', '#f98681', '#fb0200', '#94160a']
level = [-2, -1.5, -1, -0.5, 0, 0.5, 1, 1.5, 2]
cmap = colors.ListedColormap(tem_anomaly_color[1:-1], N=len(level) - 1)
cmap.set_under(tem_anomaly_color[0])
cmap.set_over(tem_anomaly_color[-1])
pic = plt.contourf(olon, olat, oz, level, cmap=cmap, extend='both')
cbar = plt.colorbar(pic, cax=position, orientation='vertical', format='%.1f', extendfrac='auto')  # 图例

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值