已经到了本专栏的最后一篇文章,前面的内容跟已经帮助我们大致建立起了一个基本的matplotlib架构,本节介绍了matplotlib中的样式和颜色的使用,是绘制图表画龙点睛的一笔。熟练掌握这部分内容可以让你的图表变得更加美观,可读性更强。
matplotlib很友好的给了我们很多内置的样式用以使用,有时候,当用户在做专题报告时,往往会希望保持整体风格的统一而不用对每张图一张张修改,因此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()
用户可以在任意路径下创建一个后缀名为mplstyle的样式清单,用以自定义styleshee编辑文件添加以下样式内容
axes.titlesize : 24
axes.labelsize : 20
lines.linewidth : 3
lines.markersize : 10
xtick.labelsize : 16
ytick.labelsize : 16
在运行这部分代码的时候,我跳过了教程中前面设置全局样式的步骤,直接运行的这一步,导致绘制的图形和教程中不一致。但是后来思考之后发现,是由于上面的代码使用了ggplot的样式 然后自己的样式文件里的设置有可能没有修改ggplot对应的样式设置 所以看起来很像ggolot的样式,但其实是以及改变了一些样式设置的
这个是未运行全局样式设置时的图像,下面是运行了之后的:
可以发现一个问题,样式设置是会被覆盖的,所以在matplotlib支持混合样式的引用,只需在引用时输入一个样式列表,若是几个样式中涉及到同一个参数,右边的样式表会覆盖左边的值。
plt.style.use(['dark_background', 'file/presentation.mplstyle'])
plt.plot([1,2,3,4],[2,3,4,5])
这里设置了背景颜色,就把原来的样式给覆盖掉了,所以大家在使用的时候要注意这一点。
这个方法其实在上一节中对字体的设置也有介绍过,当我们设置了一个大体的内置样式时,还想对某些细节进行一点修改就可以使用这个方法。
标准用法:
mpl.rcParams['lines.linewidth'] = 2
mpl.rcParams['lines.linestyle'] = '--'
plt.plot([1,2,3,4],[2,3,4,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])
rcParam支持的参数列表可以参照官方文档的相关说明
从可视化编码的角度对颜色进行分析,可以将颜色分为色相、亮度和饱和度
三个视觉通道。通常来说:
色相
: 没有明显的顺序性、一般不用来表达数据量的高低,而是用来表达数据列的类别。
明度和饱和度
: 在视觉上很容易区分出优先级的高低、被用作表达顺序或者表达数据量视觉通道。
具体关于色彩理论部分的知识,不属于本教程的重点,请参阅有关拓展材料学习。
ECharts数据可视化实验室
学会这6个可视化配色基本技巧,还原数据本身的意义
在matplotlib中,设置颜色有以下几种方式:
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))
HEX RGB 是用16进制码表示的颜色,在网页样式中大家都可以看到,同样在一些绘图,修图等软件中也可以在调色板中看的到。具体代码如下:
# 用十六进制颜色码表示,同样最后两位表示透明度,可省略
plt.plot([1,2,3],[4,5,6],color='#0f0f0f')
plt.plot([4,5,6],[1,2,3],color='#0f0f0f80')
# 当只有一个位于[0,1]的值时,表示灰度色阶
plt.plot([1,2,3],[4,5,6],color='0.5')
在matplot中有部分颜色是可以用单字符表示对应颜色的,分别是’b’, ‘g’, ‘r’, ‘c’, ‘m’, ‘y’, ‘k’, ‘w’,对应的是blue, green, red, cyan, magenta, yellow, black, and white的英文缩写。其他颜色参数都可以在官方文档中查找到。
有些图表支持使用colormap的方式配置一组颜色,从而在可视化中通过色彩的变化表达更多信息。
在matplotlib中,colormap共有五种类型:
x = np.random.randn(50)
y = np.random.randn(50)
plt.scatter(x,y,c=x,cmap='RdPu')
答案:
下面代码是我初学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()