一、颜色偏移问题
要在 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') # 图例