matplotlib
是 python 的绘图工具,这篇笔记记录了 matplotlib
库的使用。seaborn
库是以 matplotlib
库为基础的更高阶库,绘出的图也更加美观。使用 seaborn
库首先要导入。
import seaborn as sns
sns.set()
方法即可美化 matplotlib
画出的图形。美化的图形从白底变为了灰底,并且有网格,在图形颜色和字体等方面也有美化,例如。
sns.set()
x = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
y = [3, 4, 6, 8, 9, 10, 9, 11, 7, 8]
plt.plot(x, y)
set()
方法中还有一些参数可以设置。context
控制画的大小,可选值由大到小有 paper
、 notebook
、talk
、poster
。style
控制着样式,可选值有darkgrid
、whitegrid
、dark
、white
、ticks
。palette
为预设调色板,可选值有deep
、muted
、bright
、pastel
、dark
、colorblind
。font
用于设置字体,font_scale
用于设置字体大小,color_codes
使用颜色字母缩写表示颜色。
seaborn
绘图分为关联图、类别图、分布图、回归图、矩阵图、组合图六大类别。
seaborn
API 分为 Figure-level 和 Axes-level 两种,前者适合于快速绘图,后者与 matplotlib
更接近,绘图更加灵活。
当对数据进行关联分析时,可能会用到 replot
绘制关系图,scatterplot
绘制多维度分散散点图,lineplot
绘制线性图。实际上,replot
是 scatterplot
和 lineplot
的结合版本。前一个是 Figure-level 接口,后两个是 Axes-level 接口。
以下使用的数据来源于 iris 数据集。
!wget -nc "https://labfile.oss.aliyuncs.com/courses/2616/seaborn-data.zip"
!unzip seaborn-data.zip -d ~/
replot
是 relation plot 的缩写,主要有散点图和条形图两种样式。在绘制图形时指定 x
和 y
的特征。
sns.relplot(x="sepal_length", y="sepal_width", data=iris)
加入类别特征进行着色。
sns.relplot(x="sepal_length", y="sepal_width", hue="species", data=iris)
设置 style
参数还可以给不同类别设置不同形状。
sns.relplot(x="sepal_length", y="sepal_width", hue="species", style="species", data=iris)
将 kind
参数设置为 line
还可以绘制折线图,会自动给出 95% 的置信区间。
sns.relplot(x="sepal_length", y="petal_length", hue="species", style="species", kind="line", data=iris)
绘制折线图还可以使用 lineplot
,绘制散点图还可以使用 scatterplot
,效果相同。
sns.lineplot(x="sepal_length", y="petal_length",
hue="species", style="species", data=iris)
在类别图中,catplot()
是 Figure-level 接口,它是 categorical plots 的缩写。
sns.catplot(x="sepal_length", y="species", data=iris)
设置 kind
参数为 swarm
可以防止数据重叠,更好地观测数据分布。
sns.catplot(x="sepal_length", y="species", kind="swarm", data=iris)
还可以将其设置为 box
表示箱线图,violin
表示小提琴图,boxex
表示增强箱线图,point
表示点线图。bar
表示条形图,count
表示计数图。
上述各式图形还可以用 stripplot()
、swarmplot()
、boxplot()
、violinplot()
、boxenplot()
、pointplot()
、barplot()
、countplot()
实现。
分布图用于可视化变量的分布情况,一般分为单变量分布和二元变量分布。
displot()
查看单变量分布,默认情况下绘制直方图和拟合核密度估计图。
sns.distplot(iris["sepal_length"])
设置 kde
为 False
则不会绘制拟合核密度估计图,设置 hist
为 False
则不绘制直方图。
sns.distplot(iris["sepal_length"], kde=False)
sns.distplot(iris["sepal_length"], hist=False)
kdeplot()
专门用于绘制核密度估计图。
sns.kdeplot(iris["sepal_length"])
jointplot()
用于绘制二元变量分布图,它可以设置 kind
参数。
sns.jointplot(x="sepal_length", y="sepal_width", data=iris)
sns.jointplot(x="sepal_length", y="sepal_width", data=iris, kind="kde")
sns.jointplot(x="sepal_length", y="sepal_width", data=iris, kind="hex")
sns.jointplot(x="sepal_length", y="sepal_width", data=iris, kind="reg")
pairplot()
更为强大,它可以一次性地将数据集中特征两两对比图全部绘制出来,对角线上是单变量分布图,其它地方则是二元遍历分布图。
regeplot()
绘制回归图仅需指定自变量和因变量,它会自动完成线性回归拟合。
sns.regplot(x="sepal_length", y="sepal_width", data=iris)
lmplot()
同样是绘制回归图,但它支持引入第三维度进行对比,例如分类别。
sns.lmplot(x="sepal_length", y="sepal_width", hue="species", data=iris)
heatmap()
用于绘制热力图。
import numpy as np
sns.heatmap(np.random.rand(10, 10))
clustermap()
支持绘制层次聚类图。
iris.pop("species")
sns.clustermap(iris)
更详细的资料参阅官网。