python 分享一个复现文献中colorbar的简单教程

简介: 最近在阅读文献时,想要复现别人的结果,其中遇到的一个挑战就是复现别人绘图时用的colorbar,本文分享一下我是如何复现的。

前言



最近在阅读文献时,想要复现别人的结果,其中遇到的一个挑战就是复现别人绘图时用的colorbar,本文分享一下我是如何复现的。


文献中的colorbar如下图所示:


c6f31e9be3df4ed7962049ed3e80c9af.png


想要复现这样的一条colorbar,首先需要观察一下它的颜色渐变分布。上图的colorbar还是比较清晰明了的,很容易发现它是这样渐变的:


蓝=>白=>黄=>红
blue - white -yellow -red


非常巧的是NCL的colormap中恰好有一条是这样分布的,作者估计就是根据这个改的:


dbfe3fabcf464991bda340257e14d33e.png


这样就更方面了,我们在python中,先导入这一条colormap,然后


  • 重新定义一些区间范围,以及间隔
  • 修改一些参数
    即可完美实现相同的colormap。


之前也做过类似的教程分享:自定义colormap


截取colormap



下面是代码展示:


import numpy as np
import cmaps 
import matplotlib.pyplot as plt
import matplotlib as mpl   
from matplotlib.colors import ListedColormap 
#######################生成画板#####################################
fig=plt.figure(figsize=(10,8),dpi=150)
ax1=fig.add_axes([0,0,1,0.05])                                                 
ax2=fig.add_axes([0,0.25,1,0.05])  
#######################定义新的colormap#########################################
norm =mpl.colors.Normalize(vmin=-0.48, vmax=0.48)    #确定colormap的最大最小值
cmap=cmaps.BlueWhiteOrangeRed  #引用NCL的colormap
newcolors=cmap(np.linspace(0,1,12))#分片操作,生成0到1的12个数据间隔的数组   
newcmap=ListedColormap(newcolors[::1])  #重构为新的colormap
###########################################################################        
fc1=fig.colorbar(mpl.cm.ScalarMappable(norm=norm,cmap='BlueWhiteOrangeRed'),              
                 cax=ax1,                                                      
                 orientation='horizontal',    label='old cmap' ,
ticks=[-0.4,-0.32,-0.24,-0.16,-0.08,0,0.08,0.16,0.24,0.32,0.4]     ,                                                    
                 extend='both')                 
fc2=fig.colorbar(mpl.cm.ScalarMappable(norm=norm,cmap=newcmap),                                            
                  cax=ax2,         format='%.2g'    ,                                             
                  orientation='horizontal',     label='new cmap' ,
ticks=[-0.4,-0.32,-0.24,-0.16,-0.08,0,0.08,0.16,0.24,0.32,0.4]     ,                                     
                  extend='both')  
fc2.ax.tick_params(which='major',direction='in',length=29)


其中,简单对代码做一下说明:


  • cmaps 库是专门用来调用NCL colormap的一个库,非常感谢这个开发者的贡献
  • ListedColormap 用来重构一个修改后的colormap
  • 其他的代码都比较简单,对于colorbar的修饰


对比结果如下所示:


882b90c5cf094431b08e05a2c9fa28e9.png


可以发现,大致的特征已经比较一致了,稍加修饰即可成功完美复现原文的结果


拼接colormap



同样的,既然可以从一个colormap中截取一部分作为新的colormap,那么可以将两个colormap拼接为一个新的colormap吗?


  • 答案当然是可以的,实现的方法基本一致,无非是导入两个colormap而已
  • 使用np.vstack()函数,将两个colormap结果拼接,再重构为新的colormap
  • 下面直接上代码和结果


cmap1=cmaps.MPL_Blues_r            #蓝色                                   
cmap2=cmaps.cmocean_algae          #绿色   
###########################################################################                   
list_cmap1=cmap1(np.linspace(0,1,13))                                      
list_cmap2=cmap2(np.linspace(0,1,12))                                           
new_color_list=np.vstack((list_cmap1,list_cmap2))                            
new_cmap=ListedColormap(new_color_list,name='new_cmap ') 
###########################################################################                                                                      
fig=plt.figure(figsize=(10,8),dpi=200)                                        
ax1=fig.add_axes([0,0.15,1,0.03])                                                 
ax2=fig.add_axes([0,0.25,1,0.03])                                            
ax3=fig.add_axes([0,0.35,1,0.03])            
###########################################################################                                   
norm =mpl.colors.Normalize(vmin=-10, vmax=10)                              
fc1=fig.colorbar(mpl.cm.ScalarMappable(norm=norm,                            
                 cmap=cmap1),cax=ax1,                                     
                 orientation='horizontal',extend='both',
                 label='cmap1')                       
fc2=fig.colorbar(mpl.cm.ScalarMappable(norm=norm,                      
                 cmap=cmap2),cax=ax2,                                      
                 orientation='horizontal',extend='both',
                 label='cmap2')                    
fc3=fig.colorbar(mpl.cm.ScalarMappable(norm=norm,                         
                 cmap=new_cmap),cax=ax3,                                
                 orientation='horizontal',extend='both',
                 label='newcmap') 


结果如下所示:


12ff6957358842fda3fa9fe0cf853ae0.png


可以发现还是非常perfect的,感兴趣的兄弟们快去尝试吧~


                    一个努力学习python的ocean er
                      水平有限,欢迎指正!!!
                      欢迎评论、收藏、点赞、转发、关注。
                      关注我不后悔,记录学习进步的过程~~
相关文章
|
13天前
|
机器学习/深度学习 算法 调度
【EI复现】基于深度强化学习的微能源网能量管理与优化策略研究(Python代码实现)
【EI复现】基于深度强化学习的微能源网能量管理与优化策略研究(Python代码实现)
|
2月前
|
机器学习/深度学习 数据安全/隐私保护 计算机视觉
过三色刷脸技术,过三色刷脸技术教程,插件过人脸python分享学习
三色刷脸技术是基于RGB三通道分离的人脸特征提取方法,通过分析人脸在不同颜色通道的特征差异
|
2月前
|
XML Linux 区块链
Python提取Word表格数据教程(含.doc/.docx)
本文介绍了使用LibreOffice和python-docx库处理DOC文档表格的方法。首先需安装LibreOffice进行DOC到DOCX的格式转换,然后通过python-docx读取和修改表格数据。文中提供了详细的代码示例,包括格式转换函数、表格读取函数以及修改保存功能。该方法适用于Windows和Linux系统,解决了老旧DOC格式文档的处理难题,为需要处理历史文档的用户提供了实用解决方案。
117 1
|
3月前
|
数据采集 机器学习/深度学习 编解码
从零复现Google Veo 3:从数据预处理到视频生成的完整Python代码实现指南
本文详细介绍了一个简化版 Veo 3 文本到视频生成模型的构建过程。首先进行了数据预处理,涵盖了去重、不安全内容过滤、质量合规性检查以及数据标注等环节。
225 5
从零复现Google Veo 3:从数据预处理到视频生成的完整Python代码实现指南
|
1月前
|
数据采集 索引 Python
Python Slice函数使用教程 - 详解与示例 | Python切片操作指南
Python中的`slice()`函数用于创建切片对象,以便对序列(如列表、字符串、元组)进行高效切片操作。它支持指定起始索引、结束索引和步长,提升代码可读性和灵活性。
|
7月前
|
JSON 数据可视化 API
Python 中调用 DeepSeek-R1 API的方法介绍,图文教程
本教程详细介绍了如何使用 Python 调用 DeepSeek 的 R1 大模型 API,适合编程新手。首先登录 DeepSeek 控制台获取 API Key,安装 Python 和 requests 库后,编写基础调用代码并运行。文末包含常见问题解答和更简单的可视化调用方法,建议收藏备用。 原文链接:[如何使用 Python 调用 DeepSeek-R1 API?](https://apifox.com/apiskills/how-to-call-the-deepseek-r1-api-using-python/)
|
3月前
|
人工智能 搜索推荐 数据可视化
用 Python 制作简单小游戏教程:手把手教你开发猜数字游戏
本教程详细讲解了用Python实现经典猜数字游戏的完整流程,涵盖从基础规则到高级功能的全方位开发。内容包括游戏逻辑设计、输入验证与错误处理、猜测次数统计、难度选择、彩色输出等核心功能,并提供完整代码示例。同时,介绍了开发环境搭建及调试方法,帮助初学者快速上手。最后还提出了图形界面、网络对战、成就系统等扩展方向,鼓励读者自主创新,打造个性化游戏版本。适合Python入门者实践与进阶学习。
218 1
|
4月前
|
人工智能 安全 Shell
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
Jupyter MCP服务器基于模型上下文协议(MCP),实现大型语言模型与Jupyter环境的无缝集成。它通过标准化接口,让AI模型安全访问和操作Jupyter核心组件,如内核、文件系统和终端。本文深入解析其技术架构、功能特性及部署方法。MCP服务器解决了传统AI模型缺乏实时上下文感知的问题,支持代码执行、变量状态获取、文件管理等功能,提升编程效率。同时,严格的权限控制确保了安全性。作为智能化交互工具,Jupyter MCP为动态计算环境与AI模型之间搭建了高效桥梁。
291 2
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程

推荐镜像

更多