python 如何实现colorbar的标签位于每个色标中间(正下方)

前言

  • python实现colorbar标签的多样化显示

大部分文献中colorbar的色标都是如下图所示:

在这里插入图片描述
以80~100表示这个范围内数据为最显著的红色,其他范围内的各个色域类似

那么,如果我希望将最右边最红的区域定义为一个字幕,并使这个字母出现在红色的正下方,该如何实现呢?

本质上其实通过定义标签的范围来实现,观察可以发现,如果将100显示为红色的正下方,其实就是在第90的位置,将label设置为100.

描述的有点抽象,这里直接放上结果:

python 如何实现colorbar的标签位于每个色标中间(正下方)_第1张图片

附上全部代码:

# -*- 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") 

你可能感兴趣的:(python,绘图,python,开发语言,colorbar)