matplotlib 配色之 colorbar 模块详解

article/2025/10/4 17:07:28

matplotlib.colorbar 模块详解

引子

上一篇我们围绕colormap颜色映射,详细介绍了matplotlib.colorsmatplotlib.cm模块。

使用matplotlib.colors模块可以完成大多数常见的任务。似乎很少需要直接使用matplotlib.cm模块。我们继续使用上一篇最后的例子来看看 matplotlib 设计 matplotlib.cm模块的用途。

上一篇的示例中,我们用颜色反映了数据集的某个属性。
在这里插入图片描述
如果我们在旁边添加一个颜色条,如下图所示:

%matplotlib inlineimport numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as pltmpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题iris_df = pd.read_csv('../Topics/iris.csv',index_col='index_col')x = iris_df['PetalLength'].values
y = iris_df['SepalLength'].valuesfig = plt.figure()
ax= plt.axes()#创建一个ListedColormap实例
#定义了[0, 1]区间的浮点数到颜色的映射规则
cmp = mpl.colors.ListedColormap(['r','g','b'])# 创建一个BoundaryNorm实例
# BoundaryNorm是数据分组中数据归一化比较好的方法
# 定义了变量值到 [0, 1]区间的映射规则,即数据归一化
norm = mpl.colors.BoundaryNorm([0, 2, 6.4, 7], cmp.N)#绘制散点图,用x值着色,
#使用norm对变量值进行归一化,
#使用自定义的ListedColormap颜色映射实例
#norm将变量x的值归一化
#cmap将归一化的数据映射到颜色
plt.scatter(x,y,c=x, cmap=cmp, norm=norm, alpha=0.7)fcb = fig.colorbar(mpl.cm.ScalarMappable(norm=norm, cmap=cmp), ax=ax)plt.show()

在这里插入图片描述

颜色变化与数据分组的关系更加直观明了。

这是matplotlib.colorbar模块的功能,但colorbar模块需要matplotlib.cm模块的支持。

概述

Colorbar 模块提供了一个工具包,有两个类和一个函数方法:

  • ColorbarBase

    具有完整colorbar绘制功能的基类。它可以按原样用于为给定的colormap创建一个colorbar;不需要可映射的对象(例如,image)。有13个类方法。

  • Colorbar

    用于 images 或等高线图的派生类,有5个类方法。该类还有一个子类class matplotlib.colorbar.ColorbarPatch()

  • make_axes()

    用于调整轴的大小并添加适合于colorbar的第二个轴的函数

colorbar模块结构如下图:

class matplotlib.colorbar.ColorbarBase()

class matplotlib.colorbar.ColorbarBase(ax, cmap=None, norm=None, alpha=None, values=None, boundaries=None, orientation='vertical', ticklocation='auto', extend='neither', spacing='uniform', ticks=None, format=None, drawedges=False, filled=True, extendfrac=None, extendrect=False, label='')

在已有的 axes 上绘制一个Colorbar,颜色条。

这个类主要用作基类,用于提供一个基本的属性和方法。

对于终端用户,极少直接使用 ColorbarBase类。通常使用pyplot.colorbar函数或Figure.colorbar方法来创建颜色条。

通常,ColorbarScalarMappables一起使用,如通过imshow生成的 AxesImae

注:

  • matplotlib.figure.Figure类的colorbar()方法使用 matplotlib.colorbar.make_axes()方法 和class matplotlib.colorbar.Colorbar 类为 Figure实例生成一个Colorbar;
  • matplotlib.pyplot.colorbar 函数是 matplotlib.figure.Figure 类的colorbar()方法的一个简单包装。

显式使用ColorbarBase的主要应用场景是绘制与图中其他元素无关的颜色条。例如,单独显示colormap时。

如果给出了cmap参数,但是boundariesvalues参数都是 None,那么colormap将以0-1的比例显示。若要显示更低和更高值的颜色,请将norm定义为:

norm=colors.Normalize(clip=False)

要显示颜色与索引的关系,而不是0-1的比例,请使用:

norm=colors.NoNorm()
#本示例演示了直接使用 ColorbarBase()类%matplotlib inlineimport numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as pltmpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = Falsefig = plt.figure(constrained_layout=True)
ax1,ax2,ax3 = fig.subplots(1,3)
ax1.set_title('norm=norm')
ax2.set_title('norm = \n.Normalize(clip=False)')
ax3.set_title('norm = .NoNorm()')cmp = mpl.colors.ListedColormap(['r','g','b'])# 创建一个BoundaryNorm实例
norm = mpl.colors.BoundaryNorm([0, 0.4, 0.8, 1.0], cmp.N)fcb1 = mpl.colorbar.ColorbarBase(norm=norm, cmap=mpl.cm.get_cmap('Paired'),ax=ax1)
fcb2 = mpl.colorbar.ColorbarBase(norm=mpl.colors.Normalize(clip=False), cmap=mpl.cm.get_cmap('Paired'),ax=ax2)
fcb3 = mpl.colorbar.ColorbarBase(norm=mpl.colors.NoNorm(), cmap=mpl.cm.get_cmap('Paired'),ax=ax3)fig.savefig('ColorbarBase_Demo.png')plt.show()

在这里插入图片描述
ColorbarBase类提供了13个方法:

  1. add_lines(self, levels, colors, linewidths, erase=True)2. ax = None3. config_axis(self)4. draw_all(self)5. get_ticks(self, minor=False)6. minorticks_off(self)7. minorticks_on(self)8. remove(self)9. set_alpha(self, alpha)10. set_label(self, label, **kw)11. set_ticklabels(self, ticklabels, update_ticks=True)12. set_ticks(self, ticks, update_ticks=True)13. update_ticks(self)

有用的公共方法有set_label()add lines()

#本示例演示了直接使用 ColorbarBase()类%matplotlib inlineimport numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as pltfig = plt.figure(constrained_layout=True)
ax1,ax2,ax3 = fig.subplots(1,3)
ax1.set_title('norm=norm')
ax2.set_title('norm = \n.Normalize(clip=False)')
ax3.set_title('norm = .NoNorm()')mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题cmp = mpl.colors.ListedColormap(['r','g','b'])
# 创建一个BoundaryNorm实例
norm = mpl.colors.BoundaryNorm([0, 0.4, 0.8, 1.0], cmp.N)fcb1 = mpl.colorbar.ColorbarBase(norm=norm, cmap=mpl.cm.get_cmap('Paired'),ax=ax1)
fcb2 = mpl.colorbar.ColorbarBase(norm=mpl.colors.Normalize(clip=False), cmap=mpl.cm.get_cmap('Paired'),ax=ax2)
fcb3 = mpl.colorbar.ColorbarBase(norm=mpl.colors.NoNorm(), cmap=mpl.cm.get_cmap('Paired'),ax=ax3)#下面演示了ColorbarBase类的两个重要方法
fcb1.set_label('Colorbar_label') #set_label()方法
fcb1.add_lines((0.4,0.8),('r','m'),(5)) #add_lines()方法fig.savefig('ColorbarBase_Demo.png')plt.show()

在这里插入图片描述

class colorbar.Colorbar()

class matplotlib.colorbar.Colorbar(ax, mappable, **kw)

基类: matplotlib.colorbar.ColorbarBase

这个类将 class matplotlib.colorbar.ColorbarBase()连接到 class matplotlib.cm.ScalarMappable(),比如,通过matplotlib.axes.Axes.imshow()生成的 class matplotlib.image.AxesImage()

它不打算被直接实例化;相反,使用matplotlib.figure.Figure.colorbar()matplotlib.pyplot.colorbar()来创建你的colorbar

这段说明很短,但却包含了matplotlib框架中colorbar复杂的程序设计逻辑,如下图所示:

在这里插入图片描述

colorbar.Colorbar()的方法

colorbar.Colorbar()类有如下方法:

- add_lines(self, CS, erase=True)
- on_mappable_changed(self, mappable)
- remove(self)
- update_bruteforce(self, mappable)
- update_normal(self, mappable)

子类colorbar.ColorbarPatch()

matplotlib.colorbar.Colorbar 类还有一个子类:

class matplotlib.colorbar.ColorbarPatch(ax, mappable, **kw)[source]

使用 Patch 代替默认的 pcolor() 创建的 Colorbar

它使用一个 Patch 实例的列表代替PatchCollection,因为后者不允许随后修改成员的hatch(填充图案)。

模块方法matplotlib.colorbar.make_axes()

matplotlib.colorbar.make_axes(parents, location=None, orientation=None, fraction=0.15, shrink=1.0, aspect=20, **kw)

调整父轴的大小和位置,并返回适配于颜色条的子轴。

%matplotlib inlineimport numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as pltiris_df = pd.read_csv('../Topics/iris.csv',index_col='index_col')x = iris_df['PetalLength'].values
y = iris_df['SepalLength'].valuesfig = plt.figure()
ax= plt.axes()#创建一个ListedColormap实例
#定义了[0, 1]区间的浮点数到颜色的映射规则
cmp = mpl.colors.ListedColormap(['r','g','b'])# 创建一个BoundaryNorm实例
# BoundaryNorm是数据分组中数据归一化比较好的方法
# 定义了变量值到 [0, 1]区间的映射规则,即数据归一化
norm = mpl.colors.BoundaryNorm([0, 2, 6.4, 7], cmp.N)#绘制散点图,用x值着色,
#使用norm对变量值进行归一化,
#使用自定义的ListedColormap颜色映射实例
#norm将变量x的值归一化
#cmap将归一化的数据映射到颜色
plt.scatter(x,y,c=x, cmap=cmp, norm=norm, alpha=0.7)#返回适配颜色条的子轴
#可以设置颜色条的位置和方向
cax, _= mpl.colorbar.make_axes(ax, shrink=0.5,location='right')subcba = mpl.colorbar.ColorbarBase(norm=norm, cmap=cmp,ax=cax)plt.show()

在这里插入图片描述
到目前为止,全面介绍了 matplotlib 框架下的配色功能。
下一篇将延伸介绍 matplotlib 内置的 Colormap。


http://chatgpt.dhexx.cn/article/hJti9oje.shtml

相关文章

如何在matlab中设置colorbar

colorbar是matlab插值填色图的标尺,设置上下限和设置颜色是作图中基础的能力。 例如这张uha图,首先使用函数caxis([-1.2,2.2])编辑colorbar上下限,打开后右键颜色编辑器选择心怡的颜色。然后用下面的代码存储这种配色方式方便下次使用&#x…

matplotlib画图使用python可视化colorbar工具自定义颜色

python matplotlib画图使用colorbar工具自定义颜色 colorbar(draw colorbar without any mapple/plot) 自定义colorbar可以画出任何自己想要的colorbar,自由自在、不受约束,不依赖于任何已有的图(plot/mappable)。这里使用的是mp…

matplotlib 合理设置colorbar和子图的对应关系

matplotlib 合理设置colorbar和子图的对应关系 文章目录 matplotlib 合理设置colorbar和子图的对应关系1. 介绍2 plt.contourf ()2.1 错误示范2.2 使用 norm实现颜色和数值之间的对应关系2.3 只显示最后一个的colorbar2.4 使用 levels 参数设置 3. 使用plt.imshow()4 单独设置c…

matlab关于colorbar的整理(绘制不等间距colorbar, colorbar的大小位置调节, colorbar加单位等)

matlab关于colorbar的整理(绘制不等间距colorbar, colorbar的大小位置调节等 1. 绘制不等间距colorbar2. colorbar的大小位置调节3. 更改colorbar上的刻度、给colorbar加单位 对matlab关于colorbar的一些小细节进行整理,希望对一些人能够有所帮助~ 1. 绘制不等间距c…

matlab中的colorbar用法(显示色阶的颜色栏)

原文 matlab画平面分布图时colorbar的设置是非常重要的,好的colorbar不仅使图像更美观,而且能够使人更容易捕捉图上传递的信息。用过matlab的同学都知道matlab默认的colormap是jet, 也就是你画完图后输入“colorbar” 它所显示出来的颜色。此外&#xff…

Matlab的图像操作——colorbar的各项细节操作

最近在论文中用matlab生成高度场,网上搜了很多,自己做一个小小的总结。 首先,如果想在生成的图片中加上colorbar,有两种方式: 1:在生成的Figure图像的菜单栏: Insert—Colorbar, 或者单击上方快捷区添加colorbar,见下图: 2:命令行直接写上 colorbar; 如果想随意指定…

Matplotlib 系列:colorbar 的设置

转载于:Matplotlib 系列:colorbar 的设置 该文为我很及时的解决了我的烦恼,再次向作者致意~ 作者一直在持续更新python系列,请支持原作者,文章来源:炸鸡人博客 0. 前言 承接 Matplotlib 系列&#xff1a…

Chrome谷歌浏览器,清除css或js文件缓存的方法

在写网站首页界面的时候&#xff0c;css文件中给新建的<div>增加了class类的样式&#xff0c;但是无论怎样刷新都没有这个样式的效果。 F12打开开发模式&#xff0c;对比这个<div>与其他的区别&#xff0c;发现右下角的尺寸图中没有position的值&#xff0c;而pos…

浏览器-清理页面中js的缓存

【问题分析】 修改完 js文件中的代码后&#xff0c;页面刷新好几次并没有重新加载 js的文件&#xff0c;开始以为是文件设置没有修改成功&#xff0c;后来想到应该是浏览器对于 js文件的缓存机制引起的。 【解决方案】 清理浏览器的缓存 1.按“F12” 或者 右键单击页面“检查”…

js 浏览器缓存机制

什么是浏览器缓存 Web缓存是指一个Web资源&#xff08;如html页面&#xff0c;图片&#xff0c;js&#xff0c;数据等&#xff09;存在于Web服务器和客户端&#xff08;浏览器&#xff09;之间的副本。缓存会根据进来的请求保存输出内容的副本&#xff1b;当下一个请求来到的时…

哈希表和红黑树

哈希表 哈希表顾名思义是一张表&#xff0c;可以用它来存储键值对这种对应的数据&#xff0c;大家都知道&#xff0c;哈希表的查找速度很快&#xff0c;时间复杂度伪O(1)&#xff0c;那么它的查找速度为什么很快呢&#xff1f;   实际上&#xff0c;哈希表将键值变为数组的下…

3.1 哈希算法

哈希算法在区块链系统中的应用很广泛&#xff1a;比特币使用哈希算法通过公钥计算出了钱包地址、区块头以及交易事务的哈希值&#xff0c;梅克尔树结构本身就是一棵哈希树&#xff0c;就连 挖矿算法都是使用的哈希值难度匹配&#xff1b;以太坊中的挖矿计算也使用了哈希算法&am…

高效的搜索方式:哈希

前言 顺序结构以及平衡树中&#xff0c;元素关键码与其存储位置之间没有对应的关系&#xff0c;因此在查找一个元素时&#xff0c;必须要经过关键码的多次比较。顺序结构查找时间复杂度为O(N)&#xff0c;平衡树查找时间复杂度为O(logN)&#xff0c;搜索的效率取决于搜索过程中…

默克尔树入门

目录 什么是默克尔树构建默克尔树的过程默克尔树验证的原理参考 什么是默克尔树 默克尔树&#xff08;Merkle tree&#xff09;是一种数据结构&#xff0c;以它的提出者默克尔命名&#xff0c;根据默克尔树的性质也可以叫哈希树&#xff0c;是一种典型的二叉树。 默克尔树由根…

java merkle树,使用Merkle树检测数据不一致(翻译)

背景 Cassandra的逆熵功能使用Merkle树来检测副本之间的数据不一致。 定义 Merkle树是一种哈希树&#xff0c;其中的叶子包含各个数据块的哈希值&#xff0c;父节点包含其各自的子节点的哈希值。它提供了一种有效的方法来查找副本上存储的数据块中的差异&#xff0c;并减少了传…

区块链 — 默克尔树

文章目录 默克尔树生成过程应用场景在区块链中的应用 默克尔树 默克尔树&#xff08;又叫哈希树&#xff09;是一种典型的二叉树结构&#xff0c;有一个根节点、一组中间节点和一组叶节点组成。默克尔树最早由 Merkle Ralf 在 1980 年提出&#xff0c;曾广泛用于文件系统和P2P…

哈希算法的原理以及代码实现

哈希函数&#xff1a; 简单来说就是把红框内的数字根据 一定规律 存放到下方白色的数组中 &#xff08;称为哈希表&#xff09; 这里它的一定规律是 取余法 H&#xff08;key&#xff09;key%p &#xff08;还有其他方法&#xff0c;这里采用的是取余法&#xff09;,p为这个…

二、哈希算法和Merkle Tree

章节系列目录&#xff1a;点击跳转 文章目录 哈希算法哈希函数的定义可靠哈希函数需满足的要求哈希函数的主要作用哈希实际例子 Merkle Tree默克尔树完整性校验的方法哈希列表 Hash ListMerkle Tree 哈希树总结 哈希算法 哈希函数的定义 哈希函数&#xff1a;给一个任意大小的…

Android安全启动学习(四):device-mapper-verity (dm-verity)和哈希树

上一篇说AVB内存装不下的较大分区&#xff08;如文件系统&#xff09;可能会使用哈希树&#xff0c;还提到了dm-verity。这篇来看看这两个是啥&#xff1f; dm-verity 1、dm-verity 1、能不能将多个硬盘&#xff0c;映射成一个逻辑的硬盘&#xff0c;那样我们程序就不用关心复…