前言
- python实现colorbar标签的多样化显示
大部分文献中colorbar的色标都是如下图所示:
以80~100表示这个范围内数据为最显著的红色,其他范围内的各个色域类似
那么,如果我希望将最右边最红的区域定义为一个字幕,并使这个字母出现在红色的正下方,该如何实现呢?
本质上其实通过定义标签的范围来实现,观察可以发现,如果将100显示为红色的正下方,其实就是在第90的位置,将label设置为100.
描述的有点抽象,这里直接放上结果:
附上全部代码:
# -*- coding: utf-8 -*- """ Created on Wed Dec 7 10:12:20 2022 @author: jianpu @blog : https://blog.csdn.net/weixin_44237337?spm=1000.2115.3001.5343 @email: 211311040008@hhu.edu.cn introduction : keep learning althongh walk slowly """ import cmaps from matplotlib.colors import ListedColormap import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl rgb=( [ 43,67,255], [ 91,130,255], [ 136,178,255], [ 184,218,255], [ 255,255,255], [ 255,255,255], [ 255,190,190], [ 255,142,142], [ 255,97,97], [ 255,49,49], ) rgb=np.array(rgb)/255.0 newcmap=ListedColormap(rgb) clevs = np.linspace(-100,100,11) fig=plt.figure(figsize=(10,10),dpi=150) norm =mpl.colors.Normalize(vmin=-100, vmax=100) ax=fig.add_axes([0,0,0.5,0.05]) fc1=fig.colorbar( mpl.cm.ScalarMappable(norm=norm,cmap=newcmap, ), cax=ax, ticks = clevs, orientation='horizontal', ) ax2=fc1.ax ax2.xaxis.set_ticks_position('top') #将数值刻度移动到上边 ax3=ax2.secondary_xaxis('bottom') #新建ax3,使ax3与ax2完全相同,但是是处于下部 ax3.set_xticks([-90,-70,-50,-30,-10,10,30,50,70,90]) #这里的标签名称可以自定义修改成想要的 ax3.set_xticklabels(['a','b','c','d','e','f','g','h','i','j',],ha="center")