matplotlib color,matplotlib绘图颜色,Matplotlib配色之Colormap详解

matplotlib color,matplotlib绘图颜色,Matplotlib配色之Colormap详解

摘要:本文主要介绍Matplotlib配色的Colormap的详细说明,通过实例代码进行了详细介绍,对大家的学习或工作有一定的参考价值。有需要的朋友下面跟边肖学习。

概述

上一篇文章详细介绍了matplotlib直接使用‘格式化颜色定义’给图表元素上色。例如,直接指定axes.plot绘制的Line2D的颜色fmt='r '

有时,我们希望图表元素的颜色与数据集中某个变量的值相关联,颜色会随着变量的值而变化,从而反映数据趋势、数据聚合、分析师对数据的理解等信息。这时候我们会用到matplotlib的颜色映射功能,也就是把数据映射到颜色上。

要实现数据到颜色的映射,需要做两件事:

变量值变化很大。matplotlib使用[0,1]区间内的浮点数来表示颜色RGB值。首先,需要将不同的变量值映射到[0,1]区间。

将映射[0,1]区间的变量值映射到颜色。

matplotlib.colors模块是实现colormap配色功能的核心模块。

模块的Normalize()类及其子类完成第一项任务;

模块的colormap类及其子类完成第二个任务。

上述两个类的实例,即:

定义变量数据映射到[0,1]区间的规则;

和[0,1]被映射到颜色。

作为传递给绘图函数的参数,颜色可以反映变量数据的属性。请参见下面的介绍性示例。

入门示例

我们来看一个例子,简单直观的理解matplotlib.colors模块的工作原理。

利用著名的Iris数据集(Iris Data Set)中的数据来演示图表的绘制和配置,更加贴近实际应用。可以从QQ群:457079928下载这个数据集iris.csv。

Iris数据集最早出现在1936年英国著名统计学家和生物学家罗纳德费雪的论文《The use of multiple measurements in taxonomic problems》中,被用来引入线性判别分析。

在这个数据集中,包括三个不同的鸢尾物种:鸢尾,鸢尾和海滨鸢尾。每个类收集50个样本,所以这个数据集总共包含150个样本。

该数据集测量150个样本的四个特征,即:

萼片长度(花萼长度)

萼片宽度(花萼宽度)

花瓣长度(花瓣长度)

花瓣宽度(花瓣宽度)

以上四个特征的单位都是厘米(cm)。

%matplotlib内联

将numpy作为np导入

进口熊猫作为pd

将matplotlib作为mpl导入

将matplotlib.pyplot作为plt导入

iris_df=pd.read_csv('iris.csv ',index_col='index_col ')

#以花萼长度为X值,花萼宽度为Y值绘制散点图

x=iris_df['PetalLength']。价值观念

y=iris_df['SepalLength']。价值观念

图=plt.figure()

ax=plt.axes()

#直接指定颜色

#点的颜色都一样,颜色并不能反映更多的信息。

plt.scatter(x,y,c='g ')

plt.show()

如果我们分析这些数据,图中的点被分为三组,如下图所示:

我们想用点的颜色来反映分组收集的信息。我们可以这样做:

将三种颜色的列表定义为colormap

定义一个数据归一化的例子,将所需颜色的数据映射到[0,1]区间;

Cmap和norm用于实现图表元素的分组和配色。

%matplotlib内联

将numpy作为np导入

进口熊猫作为pd

将matplotlib作为mpl导入

将matplotlib.pyplot作为plt导入

iris_df=pd.read_csv('./Topics/iris.csv ',index_col='index_col ')

x=iris_df['PetalLength']。价值观念

y=iris_df['SepalLength']。价值观念

图=plt.figure()

ax=plt.axes()

#创建一个ListedColormap实例

#定义浮点数到区间[0,1]中颜色的映射规则

CMP=mpl . colors . listed colormap([' r ',' g ',' b'])

#创建BoundaryNorm的实例

# BoundaryNorm是数据分组中数据规范化的较好方法。

#定义变量值到[0,1]区间的映射规则,即数据规范化。

norm=mpl . colors . boundary norm([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)

plt.show()

上图直观的反映了数据的分组信息。

上面的例子使用了colors模块的主要函数,下面将详细讨论这个模块的体系结构。

maplotlib.colors 模块

matplotlib.colors模块的架构如下图所示:

Matplotlib.colors模块定义了10个模块命名空间的11个类和方法。

matplotlib.colors模块的主要功能是将数字或颜色参数转换成RGB或RGBA。

RGB和RGBA分别是0-1范围内的3或4个浮点数的序列。参见前面的matplotlib颜色定义格式规范。

该模块包括:

规格化数字的类和方法,即将列表中的数据映射到[0,1]区间内的浮点数;

用于将标准化数字映射到一维数组的颜色称为colormap。

理解 matplotlib.colors 模块的工作

用256个点构造一个[0,1]或[0,255]区间;想象一下,把这256个点从左到右排成一条长条形。

通过Normalize类(或其子类,使用不同的映射方法)将数据映射到这个区间。例如,在上面的示例中,如果' PetalLength '数据区间为[1.0,6.9],则将区间[1.0,6.9]映射到[0,1];上面的例子中定义了BoundaryNorm的一个实例;

构建colormap的一个实例(通常是它的子类),这个实例是用浮点数组表示的颜色名称或者RGB值的列表;

这个颜色列表依次排列在[0,1]区间的256个点上,但是每个颜色(colormap中列出的颜色)所占的位置和区间是由Normalize指定的;上例定义了一个CMP=mpl . colors . listed color map([' r ',' g ',' b']),列出了三种颜色;

如果没有定义colormap,默认使用rc image.cmap中的设置;

如果不指定Normalize,颜色。默认情况下使用Normalize。

matplotlib.Colormap类及其子类

matplotlib.colors模块的Colormap类是一个基类,它为其子类提供了一些将[0,1]的数据映射到颜色的属性和方法。基类很少被直接使用,但是它的两个子类被主要使用:

ListedColrmap()

LinearSegmentedColormap()

这两个子类是两种不同的映射方法。

colors.ListedColormap()子类

ListedColormap()类从颜色列表中生成一个颜色图。

matplotlib . colors . listed colormap类(colors,name='from_list ',N=None)

**颜色* *参数有两种形式:

Plotlib接受的规格颜色列表,例如['r ',' g ',' b'],或['C0 ',' C3 ',' C7']等。可以在基础章节中找到。

用区间[0,1]中的浮点数表示的RGB (N3)或RGBA (N4)的数组,如:array ((0.9,0.1,0.1),(0.1,0.9,0.1),(0.1,0.1,0.9))

以colors=['r ',' g ',' b']为例:

即[0,1]的区间分为三段,第一段映射到‘R’色,第二段映射到‘G’色,第三段映射到‘B’色。

请看下面的例子:

#此示例演示如何用不同的颜色分割散点图。

%matplotlib内联

将numpy作为np导入

进口熊猫作为pd

将matplotlib作为mpl导入

将matplotlib.pyplot作为plt导入

导入matplotlib.colors

x=np.linspace(1,12,24,endpoint=True)

y=x/x

图=plt.figure()

ax=plt.axes()

#只需将区间`[0,1 ]'分成四段,依次映射到列表`['R ',' G ',' B ',' Y' ]'中列出的颜色。

CMP=mpl . colors . listed colormap([' r ',' g ',' b ',' y'])

#画一个散点图,并用X值着色

# Norm没有指定,所以默认颜色。使用正常化。

#将x的值区间从[1,24]映射(规格化)到区间`[0,1 ]'。

plt.scatter(x,y,s=120,marker='s ',c=x,cmap=cmp)

plt.show()

参数 Name

可选参数。

给自定义色彩映射表命名,用matplotlib注册,然后就可以通过名字反复调用色彩映射表了。

参数 N

可选参数。

输入从列表到地图的颜色数量。默认为无,即列表中的每种颜色都作为一个项目输入到地图中。简单来说,选择列表中的颜色数量。如果

Len (colors),列表被截断,即选择列表中的前N种颜色,最后一种被丢弃。

N len(colors),通过重复列表来扩展列表。

#此示例演示了参数n的用法

%matplotlib内联

将numpy作为np导入

进口熊猫作为pd

将matplotlib作为mpl导入

将matplotlib.pyplot作为plt导入

导入matplotlib.colors

x=np.linspace(1,12,24,endpoint=True)

y=x/x

图=plt.figure()

ax=plt.axes()

ax.set_ylim(0.6,1.5)

#简单地将“[0,1 ]”区间分成N段

#因为Nlen(颜色),重复列表扩展颜色列表。

CMP=mpl . colors . listed colormap([' C2 ',' C5 ',' C0 ',' C8'],N=6)

# Nlen(colors),所以截断颜色列表。

CMP 2=mpl . colors . listed colormap([' C2 ',' C5 ',' C0 ',' C8'],N=2)

#画一个散点图,并用X值着色

# Norm没有指定,所以默认颜色。使用正常化。

#将x的值区间从[1,24]映射(规格化)到区间`[0,1 ]'。

plt.scatter(x,x/x*1.1,s=120,marker='s ',c=x,cmap=cmp)

plt.scatter(x,x/x*0.9,s=120,marker='s ',c=x,cmap=cmp2)

plt.show()

colors.LinearSegmentedColormap()子类

matplotlib . colors . linearsegmentedcolormap类(name,segmentdata,N=256,gamma=1.0)

基于线性段的查找表,从线性映射段创建颜色映射色图对象。

分段查找表是通过线性内插每个原色而生成的。

segmentdata参数是线性线段查找表。

Segmentdata是一个包含' red '、' green '和' blue '元素的字典,也就是说,这个字典有三个键:' red '、' green '和' blue '。

每个键的值是一个列表,值列表的元素是像(x,y0,y1)这样的元组,每个元组就是列表的一行。

注意:“红色”、“绿色”和“蓝色”元素项目不能少。

该字典中每个键的值列表如下:

表格中给定颜色的每一行都是x,y0,y1形式的元组,几个元组形成一个列表。

在每个键的值序列中,x必须从0到1单调递增。对于x[i]和x[i 1]之间的任何输入值Z,给定颜色的输出值将在y1[i]和*y0[i 1]*之间线性插值。

理解线性分段查找表segmentdata

颜色。LinearSegmentedColormap()子类的[0,1]区间中每个点的颜色是通过混合该点的“红”、“绿”、“蓝”三原色的值来确定的;

segmentdata参数以字典的形式提供每个段的三原色值;

每个原色都可以在[0,1]区间内分段,分段的个数由键值对的值列表中的行数决定,分段的点由tuple (x,y0,y1)中x的值决定,比如:

红色':[(0.0,0.0,0.0),

(0.4, 1.0, 1.0),

(1.0, 1.0, 1.0)]

表示:

将[0,1]区间分为两段,以0.4的位置为断点;

在[0,0.4]的区间内,‘红色’的值从0.0线性增加到1.0;

在[0.4,1.0]的区间内,“红色”的值保持在1.0不变。

绿色','蓝色'值等等;

每个点的颜色是三原色的混合。

#此示例演示了LinearSegmentedColormap映射的使用。

#对于数据分段,通过线性插值获得每个分段内部的颜色值。

#请注意comparison和ListedColormap之间的区别。

%matplotlib内联

将numpy作为np导入

进口熊猫作为pd

将matplotlib作为mpl导入

将matplotlib.pyplot作为plt导入

x=np.linspace(1,12,24,endpoint=True)

y=x/x

图=plt.figure()

ax=plt.axes()

ax.set_ylim(0.5,1.1)

#将断点设置为0.4,分为两段。

#从0.0到0.4的红色值是通过从1.0到0.0的线性插值生成的(即逐渐变化),即从红色到黑色。

#绿色,蓝色从起点到终点蓝色值为零。

#从0.4到1.0,一直是红色。

cdict1={'red': [(0.0,0.0,1.0),

(0.4, 0.0, 1.0),

(1.0, 1.0, 1.0)],

绿色':[(0.0,0.0,0.0),

(1.0, 0.0, 0.0)],

blue': [(0.0,0.0,0.0),

(1.0, 0.0, 0.0)]}

#将断点设置在0.8的位置

cdict2={'red': [(0.0,0.0,1.0),

(0.8, 0.0, 1.0),

(1.0, 1.0, 1.0)],

绿色':[(0.0,0.0,0.0),

(1.0, 0.0, 0.0)],

blue': [(0.0,0.0,0.0),

(1.0, 0.0, 0.0)]}

cm P1=mpl . colors . linearsegmentedcolormap(' name ',cdict1)

CMP 2=mpl . colors . linearsegmentedcolormap(' name ',cdict2)

#画一个散点图,并用X值着色

plt.scatter(x,x/x*0.9,s=120,marker='s ',c=x,cmap=cmp1,edgecolor='black ')

plt.scatter(x,x/x*0.7,s=120,marker='s ',c=x,cmap=cmp2,edgecolor='black ')

plt.show()

#看另一个例子

%matplotlib内联

将numpy作为np导入

进口熊猫作为pd

将matplotlib作为数学编程语言(Mathematical Programming Language)导入

将matplotlib.pyplot作为plt导入

x=np.linspace(1,12,24,endpoint=True)

y=x/x

图=plt .图()

ax=plt.axes()

cdict={'red': [(0.0,0.0,0.2),

(0.5, 1.0, 1.0),

(1.0, 1.0, 1.0)],

绿色':[(0.0,0.0,0.5),

(0.75, 1.0, 1.0),

(1.0, 1.0, 1.0)],

blue': [(0.0,0.0,0.3),

(0.25,0.0, 0.0 ),

(0.5, 0.0, 0.0),

(1.0, 1.0, 1.0)]}

CMP=mpl。颜色。linearsegmentedcolormap(' LSC ',segmentdata=cdict)

#绘制散点图,用x值着色

plt.scatter(x,y,s=120,marker='s ',c=x,cmap=cmp,edgecolor='black ')

plt.show()

matplotlib.cm 模块

matplotlib.colors模块:

用于构建一个[0, 1]的标量数据到颜色的映射,色彩映射表实例;

将实际数据归一化到[0, 1]区间,正常化及其子类的实例。

有时我们还需要对上述实例进行一些处理,如将自定义的彩色地图注册到matplotlib,后面通过其名称调用它;查询彩色地图在某个数据归一化方法下各点的RGBA值。

matplotlib设计了厘米模块,提供了:

内置的颜色映射色彩映射表,将颜色名称映射到标准的颜色定义;

彩色地图处理工具;

如注册一个色彩映射表,通过名称获取一个色彩图;

可缩放混合类,这个混合类用以支持将标量数据映射到RGBA颜色可缩放在从给定的彩色地图返回RGBA颜色之前使用数据归一化化。

厘米模块设计了一个混合类,提供了17个函数方法。

其中有3个函数方法属于模块空间:

matplotlib。厘米。get _ cmap(name=无,lut=无)

matplotlib。厘米。register _ cmap(name=None,cmap=None,data=None,lut=None)

matplotlib.cm.revcmap(数据)

有14个函数方法属于可缩放类空间:

添加检查者(自己,检查者)

自动缩放(自身)

自动缩放_无(自身)

已更改(自我)

检查_更新(自己,检查者)

get_alpha(自身)

get_array(自身)

get_clim(self)

get_cmap(self)

set_array(self,A)

set_clim(self,vmin=None,vmax=None)

set_cmap(self,cmap)

set_norm(自我,规范)

to_rgba(self,x,alpha=无,字节=假,定额=真)

类别可缩放

matplotlib。厘米。标量映射表类(norm=无,cmap=无)

可缩放混合类,用于支持标量数据到RGBA的映射。在从给定的彩色地图中返回RGBA颜色之前,可缩放利用了数据归一化。

注:使用了可缩放实例的to_rgba()方法。

matplotlib。厘米。标量映射表类充分利用数据规格化贴图到颜色处理链,以简化操作的步骤。

可绘制地图的类以matplotlib.colors模块的使标准化实例和彩色地图实例为参数。

如果是规范=无,规范默认为颜色。使标准化对象。

彩色地图有三个来源:

内置的;

第三方的彩色地图库;

自定义的。

如果为没有,默认为rcParams.image.cmap中的设置。

matplotlib.colors和matplotlib.cm模块的关系如下图所示:

%matplotlib内联

将numpy作为铭牌导入

进口熊猫作为螺纹中径

将matplotlib作为数学编程语言(Mathematical Programming Language)导入

将matplotlib.pyplot作为plt导入

x=np.linspace(1,12,24,endpoint=True)

y=x/x

图=plt .图()

ax=plt.axes()

ax.set_ylim(0.8,1.2)

#传递不同的cmap

#绘制散点图,用x值着色

plt.scatter(x,y*1.05,s=120,marker='s ',c=x,cmap='viridis ')

plt.scatter(x,y*0.95,s=120,marker='s ',c=x,cmap='magma ')

plt.show()

#观察相同的cmap,不同的规范,返回的RGBA值

norm1=mpl.colors.LogNorm()

范数2=mpl。颜色。二次抛物线形(0.4)

sm1=mpl。厘米。标量可映射表(nor m1,“viridis”)

sm2=mpl。厘米。标量映射表(范数2,“维里迪斯”)

#观察相同的规范,不同的cmap,返回的RGBA值

norm=mpl.colors.LogNorm()

sm3=mpl。厘米。标量可映射表(norm,“viridis”)

sm4=mpl。厘米。标量映射表(标准,“magma”)

再看一个实例

%matplotlib内联

将numpy作为铭牌导入

进口熊猫作为螺纹中径

将matplotlib作为数学编程语言(Mathematical Programming Language)导入

将matplotlib.pyplot作为plt导入

iris_df=pd.read_csv('iris.csv ',index_col='index_col ')

iris_df.head()

petal_l=iris_df['PetalLength'].价值观念

sepal_l=iris_df['SepalLength'].价值观念

x=花瓣_l

y=萼片_l

图=plt .图()

ax=plt.axes()

#调用cm.get_cmap()方法,

#获取名为“ocean”的内置olormap实例

cmp=plt.get_cmap('ocean ')

#创建一个规范化实例

norm=plt。规格化(vmin=np.min(x),vmax=np.max(x))

#画一个散点图并用x值着色,

#用norm标准化该对,

#使用内置的“海洋”贴图

plt.scatter(x,y,c=x,cmap=cmp,norm=norm)

plt.show()

关于Matplotlib配色的详细讲解,本文到此为止。有关matplotlib配色的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: