Python数据可视化matplotlib:第五回:样式色彩秀芳华

Python数据可视化matplotlib:第五回:样式色彩秀芳华

已经到了本专栏的最后一篇文章,前面的内容跟已经帮助我们大致建立起了一个基本的matplotlib架构,本节介绍了matplotlib中的样式和颜色的使用,是绘制图表画龙点睛的一笔。熟练掌握这部分内容可以让你的图表变得更加美观,可读性更强。

1. metplotlib的绘图样式(style)

matplotlib很友好的给了我们很多内置的样式用以使用,有时候,当用户在做专题报告时,往往会希望保持整体风格的统一而不用对每张图一张张修改,因此matplotlib库还提供了四种批量修改全局样式的方式。

1.1 matplotlib预先定义样式

可以在绘图前定义一个全局样式,matplotlib给我们提供了28中内置样式,可以使用plt.style.available查看一下支持哪些样式,下面我将全部的样式都绘制出来,大家可以看看大致有哪些样式。
code:

plt.figure(figsize = (24, 12))
for i in range(len(plt.style.available)):
    plt.subplot(4, 7, i+1)
    plt.style.use(plt.style.available[i])
    plt.plot([1,2,3,4],[2,3,4,5])

plt.tight_layout()
plt.show()

Python数据可视化matplotlib:第五回:样式色彩秀芳华_第1张图片

1.2 用户自定义stylesheet

用户可以在任意路径下创建一个后缀名为mplstyle的样式清单,用以自定义styleshee编辑文件添加以下样式内容

axes.titlesize : 24
axes.labelsize : 20
lines.linewidth : 3
lines.markersize : 10
xtick.labelsize : 16
ytick.labelsize : 16

在运行这部分代码的时候,我跳过了教程中前面设置全局样式的步骤,直接运行的这一步,导致绘制的图形和教程中不一致。但是后来思考之后发现,是由于上面的代码使用了ggplot的样式 然后自己的样式文件里的设置有可能没有修改ggplot对应的样式设置 所以看起来很像ggolot的样式,但其实是以及改变了一些样式设置的

Python数据可视化matplotlib:第五回:样式色彩秀芳华_第2张图片
这个是未运行全局样式设置时的图像,下面是运行了之后的:
Python数据可视化matplotlib:第五回:样式色彩秀芳华_第3张图片
可以发现一个问题,样式设置是会被覆盖的,所以在matplotlib支持混合样式的引用,只需在引用时输入一个样式列表,若是几个样式中涉及到同一个参数,右边的样式表会覆盖左边的值。

plt.style.use(['dark_background', 'file/presentation.mplstyle'])
plt.plot([1,2,3,4],[2,3,4,5])

Python数据可视化matplotlib:第五回:样式色彩秀芳华_第4张图片

这里设置了背景颜色,就把原来的样式给覆盖掉了,所以大家在使用的时候要注意这一点。

1.3 设置rcparams

这个方法其实在上一节中对字体的设置也有介绍过,当我们设置了一个大体的内置样式时,还想对某些细节进行一点修改就可以使用这个方法。
标准用法:

mpl.rcParams['lines.linewidth'] = 2
mpl.rcParams['lines.linestyle'] = '--'
plt.plot([1,2,3,4],[2,3,4,5])

Python数据可视化matplotlib:第五回:样式色彩秀芳华_第5张图片

便捷用法:(可一次性修改多个样式)

mpl.rc('lines', linewidth=4, linestyle='-.')
mpl.rc('axes', titlesize = 24, labelsize = 30)
plt.xlabel('xlabel')
plt.title("This is title")
plt.plot([1,2,3,4],[2,3,4,5])

Python数据可视化matplotlib:第五回:样式色彩秀芳华_第6张图片

rcParam支持的参数列表可以参照官方文档的相关说明

2. matplotlib的色彩设置在可视化中,如何选择合适的颜色和搭配组合也是需要仔细考虑的,色彩选择要能够反映出可视化图像的主旨。

从可视化编码的角度对颜色进行分析,可以将颜色分为色相、亮度和饱和度三个视觉通道。通常来说:
色相: 没有明显的顺序性、一般不用来表达数据量的高低,而是用来表达数据列的类别。
明度和饱和度: 在视觉上很容易区分出优先级的高低、被用作表达顺序或者表达数据量视觉通道。
具体关于色彩理论部分的知识,不属于本教程的重点,请参阅有关拓展材料学习。
ECharts数据可视化实验室
学会这6个可视化配色基本技巧,还原数据本身的意义

在matplotlib中,设置颜色有以下几种方式:

2.1 RGB 或RGBA

RGB大家都很熟悉,三颜色通道,红绿蓝,三基础颜色,构成了自然界中各种颜色。RGBA出来三颜色通道之外还多了一个Alpha,一般用作不肉名都参数。代码中修改color内三颜色通道的数值,来得到不同的颜色。具体颜色对应数值,请大家自行百度。

# 颜色用[0,1]之间的浮点数表示,四个分量按顺序分别为(red, green, blue, alpha),其中alpha透明度可省略
plt.plot([1,2,3],[4,5,6],color=(0.1, 0.2, 0.5))
plt.plot([4,5,6],[1,2,3],color=(0.1, 0.2, 0.5, 0.5))

Python数据可视化matplotlib:第五回:样式色彩秀芳华_第7张图片

2.2 HEX RGB 或 RGBA

HEX RGB 是用16进制码表示的颜色,在网页样式中大家都可以看到,同样在一些绘图,修图等软件中也可以在调色板中看的到。具体代码如下:

# 用十六进制颜色码表示,同样最后两位表示透明度,可省略
plt.plot([1,2,3],[4,5,6],color='#0f0f0f')
plt.plot([4,5,6],[1,2,3],color='#0f0f0f80')

Python数据可视化matplotlib:第五回:样式色彩秀芳华_第8张图片

2.3 灰度色阶
# 当只有一个位于[0,1]的值时,表示灰度色阶
plt.plot([1,2,3],[4,5,6],color='0.5')

Python数据可视化matplotlib:第五回:样式色彩秀芳华_第9张图片

2.4 单字符基本颜色

在matplot中有部分颜色是可以用单字符表示对应颜色的,分别是’b’, ‘g’, ‘r’, ‘c’, ‘m’, ‘y’, ‘k’, ‘w’,对应的是blue, green, red, cyan, magenta, yellow, black, and white的英文缩写。其他颜色参数都可以在官方文档中查找到。
Python数据可视化matplotlib:第五回:样式色彩秀芳华_第10张图片
Python数据可视化matplotlib:第五回:样式色彩秀芳华_第11张图片

2.5 使用colormap设置一组颜色

有些图表支持使用colormap的方式配置一组颜色,从而在可视化中通过色彩的变化表达更多信息。

在matplotlib中,colormap共有五种类型:

  • 顺序(Sequential)。通常使用单一色调,逐渐改变亮度和颜色渐渐增加,用于表示有顺序的信息
  • 发散(Diverging)。改变两种不同颜色的亮度和饱和度,这些颜色在中间以不饱和的颜色相遇;当绘制的信息具有关键中间值(例如地形)或数据偏离零时,应使用此值。
  • 循环(Cyclic)。改变两种不同颜色的亮度,在中间和开始/结束时以不饱和的颜色相遇。用于在端点处环绕的值,例如相角,风向或一天中的时间。
  • 定性(Qualitative)。常是杂色,用来表示没有排序或关系的信息。
  • 杂色(Miscellaneous)。一些在特定场景使用的杂色组合,如彩虹,海洋,地形等。
x = np.random.randn(50)
y = np.random.randn(50)
plt.scatter(x,y,c=x,cmap='RdPu')

Python数据可视化matplotlib:第五回:样式色彩秀芳华_第12张图片

3. 思考题

  • 学习如何自定义colormap,并将其应用到任意一个数据集中,绘制一幅图像,注意colormap的类型要和数据集的特性相匹配,并做简单解释。

答案:
下面代码是我初学sklearn写过的代码,三种不同的颜色,分别代表了鸢尾花三种类型的数据,这里使用的是sklearn库自带的数据,方便处理。

import pandas as pd                       #数据分析、处理
import numpy as np                        #科学计算包
import matplotlib.pyplot as plt           #画图

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split 
iris_dataset = load_iris() # sklearn已经整理了Iris数据集,使用load_iris函数可以直接下载,使用;

 
#导入数据
iris = datasets.load_iris()
X = iris.data[:,:2]  #指选择第一个和第三个特征作为输入
y = iris.target   # 输出
 
x_min,x_max = X[:,0].min()-.5, X[:,0].max()+.5
y_min,y_max = X[:,1].min()-.5, X[:,1].max()+.5
 
plt.figure(2,figsize=(8,6))
plt.clf()
 
plt.scatter(X[:,0],X[:,1],c=y,cmap=plt.cm.Set1,edgecolor='k')
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')#以花瓣长度和宽度为横纵坐标绘制一个图
 
plt.xlim(x_min, x_max)
plt.ylim(y_min, y_max)
plt.xticks(())
plt.yticks(())
 
plt.show()

Python数据可视化matplotlib:第五回:样式色彩秀芳华_第13张图片

你可能感兴趣的:(matplotlib学习笔记,机器学习,人工智能,python)