Matplotlib配色功能详解01_基础篇

Matplotlib专题_配色,图表配色基础篇

博文已很长时间没有更新,不是因为新冠疫情,而是因为老家有一块宅基地,想建一个度假草堂,当然要自己动手设计,就集中精力去研究了一下Chief Architecture,算是在 Matplotlib 探索的旅途中被路边的一朵小花分散了注意力!

言归真传!

当我们掌握了matplotlib绘图的基本流程,能够绘制一些简单的图表时,就会想要让自己的图表具有丰富的色彩–即给图表配色。”食、色,性也!“

我将用一个专题系列文章来讨论matplotlib的配色功能。

配色是一个复杂的话题,涉及到数据理解、色彩学、美学等,但我们应该先从最基本的,如何为图表元素指定颜色开始。

在Matplotlib中,要为图表元素,如线条、文字、坐标轴等指定颜色,有两种方法:

  • 直接使用matplotlib能够识别的颜色定义格式,如某个颜色集中的颜色名称或名称的简写、十六进制的颜色定义字符串、RGB值元组。 这是基础。
  • 使用colormap,将数据映射为颜色模型。

Matplotlib可以识别 9 种格式定义的颜色,可以直接将这些格式的颜色定义赋值给绘图元素的color参数。

下面将依次结合实例详解它们:

1. 使用RGB值的浮点数元组

浮点数表示R、G、B值元组,如:(0.7, 0.2, 0.3)。

标准的RGB值是[0, 255] 区间的十进制整数,在matplotlib则是[0, 1]区间的浮点数,就是做区间 [0, 255] 到 区间 [0, 1] 的线性变换:

变换函数:
f ( x ) = a × x + b f(x) = a \times x + b f(x)=a×x+b

f ( x ) = 1 v m a x − v m i n × x − v m i n v m a x − v m i n f(x) = \frac{1}{vmax-vmin} \times x - \frac{vmin}{vmax - vmin} f(x)=vmaxvmin1×xvmaxvminvmin

在这里vmax = 255, vmin=0,即RGB值除以255就是matplotlib可以识别的色彩浮点数元组。

这个概念很重要,进阶部分的 colormap,Normalize,实际上都是基于这个思想。

%matplotlib inline

import math
import numpy as np
import matplotlib as mpl
from matplotlib import pyplot as plt

fig = plt.figure()

plt.axes()

x = np.arange(0, 2*math.pi, 0.001)
y = np.sin(x)

plt.plot(x, y, color=(0.7,0.2,0.3))  #RGB值的浮点数元组
#与plt.plot(x, y, color=(178/255, 51/255, 77/255)) 等效

plt.show()

在这里插入图片描述

2. 十六进制颜色值字符串

上述十进制整数表示的RGB值可以用十六进制字符串表示,如:#FF7F0E,与 (225,127,14)是相同的颜色。

%matplotlib inline

import math
import numpy as np
import matplotlib as mpl
from matplotlib import pyplot as plt

fig = plt.figure()

plt.axes()

x = np.arange(0, 2*math.pi, 0.001)
y = np.sin(x)

plt.plot(x, y, color='#FF7F0E') #十六进制表示 的颜色

plt.show()

在这里插入图片描述

3. 简写的十六进制颜色字符串

相当于通过复制每个字符获得的十六进制RGB或RGBA字符串,例如,“# abc“ 相当于 “# aabbcc“,”#abcd” 相当于 “#aabbccdd”。

**注意:**这是matplotlib 3.2开始新增的功能,如果你这样使用遇到错误,请检查你的matplotlib版本。

import math
import numpy as np
import matplotlib as mpl
from matplotlib import pyplot as plt

fig = plt.figure()

plt.axes()

x = np.arange(0, 2*math.pi, 0.001)
y = np.sin(x)

plt.plot(x, y, color='#f4f')  #十六进制的简写

plt.show()

在这里插入图片描述

4. 灰度

用一个[0, 1]区间的浮点数表示的灰度,例如’0.5’;0代表黑色,1代表白色,0.5表示 中等灰度;

%matplotlib inline

import math
import numpy as np
import matplotlib as mpl
from matplotlib import pyplot as plt

fig = plt.figure()

plt.axes()

x = np.arange(0, 2*math.pi, 0.001)
y = np.sin(x)

plt.plot(x, y, color='0.4') #灰度值

plt.show()

在这里插入图片描述

5. 八个基本色名称的首字母

8个常用颜色英文名称的首字母表示颜色名称简写,{'b', 'g', 'r', 'c', 'm', 'y', 'k', 'w'},分别是:蓝色blue、绿色green、红色red、青色cyan、品红magenta、黄色yellow、黑色black和白色white。

%matplotlib inline

import math
import numpy as np
import matplotlib as mpl
from matplotlib import pyplot as plt

fig = plt.figure()

plt.axes()

x = np.arange(0, 2*math.pi, 0.001)
y = np.sin(x)

plt.plot(x, y, color='m') #8个常用颜色的首字母

plt.show()

在这里插入图片描述

6. X11/CSS4颜色集的名称

一个被称为“X11”颜色集中颜色的名称,该颜色集是HTML设计重要的颜色名称及其定义。在matplotlib中以字典的形式保存了该颜色集的定义,颜色名称是字典的keys, 定义颜色的十六进制值是对应的values。

调用matplotlib.colors模块中的 CSS4_COLORS字典可以输出该颜色集,共有148种颜色。

import matplotlib as mpl
mpl.colors.CSS4_COLORS

在这里插入图片描述

%matplotlib inline

import math
import numpy as np
import matplotlib as mpl
from matplotlib import pyplot as plt

fig = plt.figure()

plt.axes()

x = np.arange(0, 2*math.pi, 0.001)
y = np.sin(x)

plt.plot(x, y, color='burlywood')

plt.show()

7. xkcd颜色集

xkcd color survey颜色名称,带有前缀’xkcd:’,不区分大小写,例如:xkcd:sky blue。xkcd色彩集是通过网络调查,搜集整理的954种颜色名称和对应的十六进制值。

matplotlib在colors模块的XKCD_COLORS字典中保存了该颜色集的全部名称和对应的定义颜色的十六进制值。
在这里插入图片描述

%matplotlib inline

import math
import numpy as np
import matplotlib as mpl
from matplotlib import pyplot as plt

fig = plt.figure()

plt.axes()

x = np.arange(0, 2*math.pi, 0.001)
y = np.sin(x)

plt.plot(x, y, color='xkcd:tea')

plt.show()

在这里插入图片描述

8. Tableau 调色板

Tableau是一个数据分析软件,它有一个10分类的调色板(‘T10’ categorical palette)用于为图表配色(默认色环):insensitive):

{'tab:blue', 'tab:orange', 'tab:green', 'tab:red', 'tab:purple', 'tab:brown', 'tab:pink', 'tab:gray', 'tab:olive', 'tab:cyan'}

Matplotlib支持该调色板的颜色,不区分大小写。

matplotlib在colors模块的TABLEAU_COLORS字典中保存了该调色板的颜色名称和对应的定义颜色的十六进制值。
在这里插入图片描述

%matplotlib inline

import math
import numpy as np
import matplotlib as mpl
from matplotlib import pyplot as plt

fig = plt.figure()

plt.axes()

x = np.arange(0, 2*math.pi, 0.001)
y = np.sin(x)

plt.plot(x, y, color='tab:purple')

plt.show()

在这里插入图片描述

9. "CN"颜色定义

“CN"颜色定义。

matplotlib.rcParams['axes.prop_cycle'] 参数定义了一个cycler(循环器)。该参数存储了10种常用的颜色,可以通过索引循环调用。

‘C’后面跟一个数字,这个数字是颜色在色彩环中的索引,如果色环中不包括这个颜色,默认是黑色,

关于cycler,请参见 https://matplotlib.org/cycler/。
在这里插入图片描述

%matplotlib inline

import math
import numpy as np
import matplotlib as mpl
from matplotlib import pyplot as plt

fig = plt.figure()

plt.axes()

x = np.arange(0, 2*math.pi, 0.001)
y = np.sin(x)

plt.plot(x, y, color='C2')

plt.show()

在这里插入图片描述

总结

matplotlib配色功能很强大,最基本的就是简单、直接地给图表元素指定一个颜色。这些颜色的名称、格式当然应该是matplotlib支持的颜色格式。

matplotlib 3.2.0支持上述 9 种格式的颜色定义。

为了便于大家查阅和使用其中的颜色集,我提供了一个"list of named colors.ipynb",它列出了上面提到的颜色集的颜色名称、定义值、直观的颜色条,有需要的可以到 Python草堂群:457079928 下载。

部分截图如下:
在这里插入图片描述
下一篇,我们将讨论 matplotlib 更高级的配色功能,颜色映射 colormap。

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python草堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值