matplotlib|matplotlib 配色之 colorbar 模块详解
matplotlib.colorbar 模块详解
引子 上一篇我们围绕colormap
颜色映射,详细介绍了matplotlib.colors
和 matplotlib.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
方法来创建颜色条。通常,
Colorbar
与 ScalarMappables
一起使用,如通过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
参数,但是boundaries
和values
参数都是 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 = None
3. 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|matplotlib 配色之 colorbar 模块详解】基类:
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。
推荐阅读
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- Python专栏|数据分析的常规流程
- Python|Win10下 Python开发环境搭建(PyCharm + Anaconda) && 环境变量配置 && 常用工具安装配置
- Python绘制小红花
- Pytorch学习|sklearn-SVM 模型保存、交叉验证与网格搜索
- OpenCV|OpenCV-Python实战(18)——深度学习简介与入门示例
- python|8. 文件系统——文件的删除、移动、复制过程以及链接文件
- 爬虫|若想拿下爬虫大单,怎能不会逆向爬虫,价值过万的逆向爬虫教程限时分享
- 分布式|《Python3网络爬虫开发实战(第二版)》内容介绍
- java|微软认真聆听了开源 .NET 开发社区的炮轰( 通过CLI 支持 Hot Reload 功能)