- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Matplotlib配色之Colormap详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
上一篇详细介绍了 matplotlib 直接使用"格式化的颜色定义"给图表元素配色。如,直接指定 axes.plot 绘制的 line2d 的颜色 fmt = 'r'.
有时我们希望图表元素的颜色与数据集中某个变量的值相关,颜色随着该变量值的变化而变化,以反映数据变化趋势、数据的聚集、分析者对数据的理解等信息,这时,我们就要用到 matplotlib 的颜色映射(colormap)功能,即将数据映射到颜色.
要实现数据到颜色的映射需要做两件事:
[0, 1]
区间的浮点数表示颜色rgb值,首先需要将不同的变量值映射到[0, 1]
区间;[0, 1]
区间的变量值映射到颜色。matplotlib.colors 模块是实现 colormap 配色功能的核心模块.
normalize()
类及其子类完成第1个任务;colormap
类及其子类完成第2个任务。将上述两个类的实例,即:
[0, 1]
区间的规则;[0, 1]
映射到颜色的规则。作为参数传递给绘图函数,即可实现颜色反映变量数据属性的目的。参见下面的入门示例.
我们先看一个示例,简单、直观地了解 matplotlib.colors模块的工作原理.
使用有名的 iris data set(鸢尾属植物数据集)中的数据来演示图表的绘制和配置,这样更接近实际的应用。可以到qq群:457079928中下载这个数据集iris.csv.
iris 数据集首次出现在著名的英国统计学家和生物学家ronald fisher 1936年的论文《the use of multiple measurements in taxonomic problems》中,被用来介绍线性判别式分析.
在这个数据集中,包括了三类不同的鸢尾属植物:iris setosa,iris versicolour,iris virginica。每类收集了50个样本,因此这个数据集一共包含了150个样本.
该数据集测量了 150 个样本的 4 个特征,分别是:
以上四个特征的单位都是厘米(cm).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
%
matplotlib inline
import
numpy as np
import
pandas as pd
import
matplotlib as mpl
import
matplotlib.pyplot as plt
iris_df
=
pd.read_csv(
'iris.csv'
,index_col
=
'index_col'
)
#用花萼长度作为 x 值, 花萼宽度作为 y 值绘制散点图
x
=
iris_df[
'petallength'
].values
y
=
iris_df[
'sepallength'
].values
fig
=
plt.figure()
ax
=
plt.axes()
# 直接指定颜色
# 点的颜色都一样,颜色不反映更多的信息
plt.scatter(x, y,c
=
'g'
)
plt.show()
|
如果我们分析这个数据,图中的点聚集成 3 个组,如下图所示:
我们希望用点的颜色反映这种分组聚集的信息,可以这样做:
[0, 1]
区间;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
%
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
)
plt.show()
|
上图就比较直观地反映了数据的分组信息.
上面的示例使用了 colors 模块中的主要功能,下面就详细讨论该模块的架构.
matplotlib.colors模块的架构如下图所示:
matplotlib.colors模块定义了11个类,定义了10个模块命名空间的方法.
matplotlib.colors模块的主要功能就是将数字或颜色参数转换为rgb或rgba.
rgb和rgba分别是0-1范围内3个或4个浮点数的序列。参见上一篇 matplotlib 颜色定义格式规范中的相关内容.
此模块包括:
用于将数字归一化的类和方法,即将列表中的数据映射到 [0,1]区间的浮点数; 。
用于将归范化后的数字映射到一维数组中的颜色,称之为 colormap.
[0,1]
或 [0, 255]
区间,该区间上有256个点;请想像把这256个点从左到右排列成一个长条;normalize
类(或者它的子类,映射方法不同)将数据映射到这个区间,比如上例中'petallength'数据区间是[1.0, 6.9]
, 就将区间[1.0, 6.9]
映射到[0, 1]
; 上例中定义了一个boundarynorm
实例;colormap
(通常是它的子类)实例,该实例是一个颜色名称列表,或者浮点数数组表示的rgb值;[0, 1]
这个区间的256个点上,但每个颜色(colormap中列出的颜色)占用的位置和区间则由normalize
指定;上例中定义一个cmp = mpl.colors.listedcolormap(['r','g','b'])
,列出了3种颜色;colormap
,则默认使用rc image.cmap
中的设置;normalize
,则默认使用colors.normalize
。matplotlib.colors模块的colormap类是一个基类,提供了将[0, 1]的数据映射到颜色的一些属性和方法供其子类使用,很少直接使用该基类,主要使用它的两个子类:
这两个子类就是两种不同的映射方法.
listedcolormap()类从颜色列表生成一个colormap.
1
|
class
matplotlib.colors.listedcolormap(colors, name
=
'from_list'
, n
=
none)
|
**colors**参数有两种形式:
matplotlib
接受的规范的颜色列表,如['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'色.
请看下面的示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#本示例演示对散点条分段着不同颜色
%
matplotlib inline
import
numpy as np
import
pandas as pd
import
matplotlib as mpl
import
matplotlib.pyplot as plt
import
matplotlib.colors
x
=
np.linspace(
1
,
12
,
24
, endpoint
=
true)
y
=
x
/
x
fig
=
plt.figure()
ax
=
plt.axes()
# 将`[0, 1]`区间简单地分成四段,依次映射为列表`['r','g','b','y']`中列出的颜色
cmp
=
mpl.colors.listedcolormap([
'r'
,
'g'
,
'b'
,
'y'
])
#绘制散点图,用x值着色
#没有指定norm,所以使用默认的`colors.normalize`
#将x的值区间为 [1, 24]`映射(归一化)到`[0, 1]`区间
plt.scatter(x, y,s
=
120
, marker
=
's'
, c
=
x, cmap
=
cmp
)
plt.show()
|
参数 name 。
可选参数.
给自定义的colormap命名,将这个colormap注册到matplotlib,后面即可以通过名称来反复调用该colormap.
参数 n 。
可选参数.
从列表中的颜色输入到映射的颜色数量。默认为none,即列表中的每个颜色都作为一项输入到映射中。简单地说,就是选用列表中的颜色数量。如果 。
n < len(colors)
,列表被截断,即选用列表前n个颜色,后面的丢弃。n > len(colors)
,通过重复列表以扩展列表。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
#本示例演示了参数 n 的用法
%
matplotlib inline
import
numpy as np
import
pandas as pd
import
matplotlib as mpl
import
matplotlib.pyplot as plt
import
matplotlib.colors
x
=
np.linspace(
1
,
12
,
24
, endpoint
=
true)
y
=
x
/
x
fig
=
plt.figure()
ax
=
plt.axes()
ax.set_ylim(
0.6
,
1.5
)
# 将`[0, 1]`区间简单地分成 n 段
# 由于n>len(colors),所以重复列表以扩展颜色列表
cmp
=
mpl.colors.listedcolormap([
'c2'
,
'c5'
,
'c0'
,
'c8'
],n
=
6
)
# n<len(colors),所以截断颜色列表
cmp2
=
mpl.colors.listedcolormap([
'c2'
,
'c5'
,
'c0'
,
'c8'
],n
=
2
)
#绘制散点图,用x值着色
#没有指定norm,所以使用默认的`colors.normalize`
#将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()
|
1
|
class
matplotlib.colors.linearsegmentedcolormap(name, segmentdata, n
=
256
, gamma
=
1.0
)
|
基于线性分段的查找表,从线性映射段创建颜色映射 colormap 对象.
线性分段查找表是使用对每个原色进行线性插值生成的.
segmentdata参数就是这个线性分段查找表.
segmentdata是一个带'red'、‘green'、'blue'元素项的字典,即这个字典有三个keys:‘red'、‘green'、‘blue'.
每个健的值是一个列表,值列表的元素是形如: (x, y0, y1) 的元组,每个元组是列表的一行.
注意: ‘red'、‘green'、'blue'元素项不能少.
该字典中每个键的值列表的形式如下:
表中给定颜色的每一行都是形如 x, y0, y1 的元组,若干个元组构成列表.
在每个键的值序列中,x 必须从 0 到 1 单调增加。对于介于 x[i] 和 x[i+1] 之间的任何输入值 z, 给定颜色的输出值将在 y1[i] 和 *y0[i+1]*之间线性插值.
colors.linearsegmentedcolormap()子类在[0,1]区间上每个点的颜色是由该点的'red'、‘green'、'blue'三原色的值混合确定; 。
segmentdata 参数以一个字典形式提供每一段三原色值; 。
每个原色在[0, 1]区间上可以分段,分几段由键值对中值列表的行数决定,分段的点则由元组(x, y0, y1)中的x值决定,如:
1
2
3
|
'red'
: [(
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]区间段内,'red'的值从 0.0 线性增加到 1.0; [0.4, 1.0]区间段内,'red'的值保持 1.0 不变.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
#本示例演示 linearsegmentedcolormap 映射用法
#对数据分段,每一段的内部通过线性插值获得颜色值
#请注意比较与listedcolormap的不同
%
matplotlib inline
import
numpy as np
import
pandas as pd
import
matplotlib as mpl
import
matplotlib.pyplot as plt
x
=
np.linspace(
1
,
12
,
24
, endpoint
=
true)
y
=
x
/
x
fig
=
plt.figure()
ax
=
plt.axes()
ax.set_ylim(
0.5
,
1.1
)
# 在0.4位置设置断点,分为两段
# 从0.0到0.4之间的 red 值是从 1.0 到 0.0 线性插值生成的(即渐变的),即从红色到黑色
# green, blue的值从开始点到结束点都是零
# 从 0.4 到 1.0,则始终是红色
cdict1
=
{
'red'
: [(
0.0
,
0.0
,
1.0
),
(
0.4
,
0.0
,
1.0
),
(
1.0
,
1.0
,
1.0
)],
'green'
: [(
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
)],
'green'
: [(
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
)]}
cmp1
=
mpl.colors.linearsegmentedcolormap(
'name'
,cdict1)
cmp2
=
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()
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
# 再看一个示例
%
matplotlib inline
import
numpy as np
import
pandas as pd
import
matplotlib as mpl
import
matplotlib.pyplot as plt
x
=
np.linspace(
1
,
12
,
24
, endpoint
=
true)
y
=
x
/
x
fig
=
plt.figure()
ax
=
plt.axes()
cdict
=
{
'red'
: [(
0.0
,
0.0
,
0.2
),
(
0.5
,
1.0
,
1.0
),
(
1.0
,
1.0
,
1.0
)],
'green'
: [(
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.colors.linearsegmentedcolormap(
'lsc'
,segmentdata
=
cdict)
#绘制散点图,用x值着色
plt.scatter(x, y,s
=
120
,marker
=
's'
,c
=
x,cmap
=
cmp
,edgecolor
=
'black'
)
plt.show()
|
matplotlib.colors模块:
[0, 1]
的标量数据到颜色的映射,colormap 实例;[0, 1]
区间,normalize
及其子类的实例。有时我们还需要对上述实例进行一些处理,如将自定义的colormap注册到matplotlib,后面通过其名称调用它;查询colormap在某个数据归一化方法下各点的rgba值.
matplotlib设计了cm模块,提供了:
scalarmappable
混合类,这个混合类用以支持将标量数据映射到rgba颜色。scalarmappable
在从给定的colormap返回rgba颜色之前使用数据归一化化。cm模块设计了 1 个混合类,提供了17个函数方法.
其中有3个函数方法属于模块空间:
有14个函数方法属于scalarmappable类空间:
class scalarmappable 。
1
|
class
matplotlib.cm.scalarmappable(norm
=
none, cmap
=
none)
|
scalarmappable混合类,用于支持标量数据到rgba的映射。在从给定的colormap中返回rgba颜色之前,scalarmappable利用了数据归一化.
注: 使用了scalarmappable实例的to_rgba()方法.
matplotlib.cm.scalarmappable 类充分利用data->normalize->map-to-color处理链,以简化操作的步骤.
scaplarmapable类以matplotlib.colors模块的 normalize实例和colormap实例为参数.
如果是norm = none, norm 默认为colors.normalize对象.
colormap 有三个来源:
如果为none,默认为rcparams.image.cmap中的设置.
matplotlib.colors 和 matplotlib.cm 模块的关系如下图所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
%
matplotlib inline
import
numpy as np
import
pandas as pd
import
matplotlib as mpl
import
matplotlib.pyplot as plt
x
=
np.linspace(
1
,
12
,
24
, endpoint
=
true)
y
=
x
/
x
fig
=
plt.figure()
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()
|
1
2
3
4
5
6
|
#观察相同的cmap,不同的norm,返回的rgba值
norm1
=
mpl.colors.lognorm()
norm2
=
mpl.colors.twoslopenorm(
0.4
)
sm1
=
mpl.cm.scalarmappable(norm1,
'viridis'
)
sm2
=
mpl.cm.scalarmappable(norm2,
'viridis'
)
|
1
2
3
4
5
|
#观察相同的norm, 不同的cmap,返回的rgba值
norm
=
mpl.colors.lognorm()
sm3
=
mpl.cm.scalarmappable(norm,
'viridis'
)
sm4
=
mpl.cm.scalarmappable(norm,
'magma'
)
|
再看一个实例 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
%
matplotlib inline
import
numpy as np
import
pandas as pd
import
matplotlib as mpl
import
matplotlib.pyplot as plt
iris_df
=
pd.read_csv(
'iris.csv'
,index_col
=
'index_col'
)
iris_df.head()
petal_l
=
iris_df[
'petallength'
].values
sepal_l
=
iris_df[
'sepallength'
].values
x
=
petal_l
y
=
sepal_l
fig
=
plt.figure()
ax
=
plt.axes()
#调用cm.get_cmap()方法,
#获取内置的名为'ocean'的olormap实例
cmp
=
plt.get_cmap(
'ocean'
)
#创建一个normalize实例
norm
=
plt.normalize(vmin
=
np.
min
(x),vmax
=
np.
max
(x))
#绘制散点图,用x值着色,
#使用norm对进行归一化,
#使用内置的'ocean'映射
plt.scatter(x, y,c
=
x,cmap
=
cmp
,norm
=
norm)
plt.show()
|
到此这篇关于matplotlib配色之colormap详解的文章就介绍到这了,更多相关matplotlib colormap内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。
原文链接:https://blog.csdn.net/sinat_32570141/article/details/105226330 。
最后此篇关于Matplotlib配色之Colormap详解的文章就讲到这里了,如果你想了解更多关于Matplotlib配色之Colormap详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
大家好,我是汤师爷~ 什么是订单履约系统? 订单履约是从消费者下单支付到收到商品的全流程管理过程,包括订单接收、订单派单、库存分配、仓储管理和物流配送等环节,核心目标是确保商品准时、准确地送达消费
大家好,我是汤师爷~ 今天聊聊促销系统整体规划。 各类促销活动的系统流程,可以抽象为3大阶段: B端促销活动管理:商家运营人员在后台系统中配置和管理促销活动,包括设定活动基本信息、使用规则
全称“Java Virtual Machine statistics monitoring tool”(statistics 统计;monitoring 监控;tool 工具) 用于监控虚拟机的各种运
主要是讲下Mongodb的索引的查看、创建、删除、类型说明,还有就是Explain执行计划的解释说明。 可以转载,但请注明出处。  
1>单线程或者单进程 相当于短链接,当accept之后,就开始数据的接收和数据的发送,不接受新的连接,即一个server,一个client 不存在并发。 2>循环服务器和并发服务器
详解 linux中的关机和重启命令 一 shutdown命令 shutdown [选项] 时间 选项: ?
首先,将json串转为一个JObject对象: ? 1
matplotlib官网 matplotlib库默认英文字体 添加黑体(‘SimHei')为绘图字体 代码: plt.rcParams['font.sans-serif']=['SimHei'
在并发编程中,synchronized关键字是常出现的角色。之前我们都称呼synchronized关键字为重量锁,但是在jdk1.6中对synchronized进行了优化,引入了偏向锁、轻量锁。本篇
一般我们的项目中会使用1到2个数据库连接配置,同程艺龙的数据库连接配置被收拢到统一的配置中心,由DBA统一配置和维护,业务方通过某个字符串配置拿到的是Connection对象。  
实例如下: ? 1
1. MemoryCahe NetCore中的缓存和System.Runtime.Caching很相似,但是在功能上做了增强,缓存的key支持object类型;提供了泛型支持;可以读缓存和单个缓存
argument是javascript中函数的一个特殊参数,例如下文,利用argument访问函数参数,判断函数是否执行 复制代码 代码如下: <script
一不小心装了一个Redis服务,开了一个全网的默认端口,一开始以为这台服务器没有公网ip,结果发现之后悔之莫及啊 某天发现cpu load高的出奇,发现一个minerd进程 占了大量cpu,googl
今天写这个是为了 提醒自己 编程过程 不仅要有逻辑 思想 还有要规范 代码 这样可读性 1、PHP 编程规范与编码习惯最主要的有以下几点: 1 文件说明 2 funct
摘要:虚拟机安装时一般都采用最小化安装,默认没有lspci工具。一台测试虚拟网卡性能的虚拟机,需要lspci工具来查看网卡的类型。本文描述了在一个虚拟机中安装lspci工具的具体步骤。 由于要测试
1、修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统
目录 算术运算符 基本四则运算符 增量赋值运算符 自增/自减运算符 关系运算符 逻
如下所示: ? 1
MapperScannerConfigurer之sqlSessionFactory注入方式讲解 首先,Mybatis中的有一段配置非常方便,省去我们去写DaoImpl(Dao层实现类)的时间,这个
我是一名优秀的程序员,十分优秀!