matplotlib 配色之 colorbar 模块详解

您所在的位置:网站首页 python中pltfigure matplotlib 配色之 colorbar 模块详解

matplotlib 配色之 colorbar 模块详解

#matplotlib 配色之 colorbar 模块详解| 来源: 网络整理| 查看: 265

matplotlib.colorbar 模块详解 引子

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

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

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

%matplotlib inline import numpy as np import pandas as pd import matplotlib as mpl import matplotlib.pyplot as plt mpl.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'].values fig = 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 inline import numpy as np import pandas as pd import matplotlib as mpl import matplotlib.pyplot as plt mpl.rcParams['font.sans-serif'] = ['SimHei'] mpl.rcParams['axes.unicode_minus'] = False fig = 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 inline import numpy as np import pandas as pd import matplotlib as mpl import matplotlib.pyplot as plt fig = 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 inline import numpy as np import pandas as pd import matplotlib as mpl import matplotlib.pyplot as plt iris_df = pd.read_csv('../Topics/iris.csv',index_col='index_col') x = iris_df['PetalLength'].values y = iris_df['SepalLength'].values fig = 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。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3