大部分文献中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")