Seaborn介绍
接下来会用到的数据:
链接:https://pan.baidu.com/s/1RAqFCxWcl4OEChlRtSBooA
提取码:612s
Seaborn 是一个基于 matplotlib 且数据结构与 pandas 统一的统计图制作库。他提前已经定义好了一套自己的风格。然后也封装了一系列的方便的绘图函数,之前通过matplotlib
需要很多代码才能完成的绘图,使用seaborn
可能就是一行代码的事情。
- 关系型绘图
- 分类型绘图
- 分布型绘图
- 线性关系绘图
Seaborn安装
1.通过 pip
:pip install seaborn
2.通过anaconda
: conda install seaborn
关系型绘图
seaborn.relplot()
这个函数功能非常强大,可以用来表示多个变量之间的关联关系。默认情况下是绘制散点图,也可以绘制线性图,具体绘制什么图形是通过kind
参数来决定的。实际上以下两个函数就是relplot
的特例:
- 散点类型:scatterplot -> relplot(kind=”scatter”)
- 线性类型:lineplot -> relplot(kind=”line”)
基本使用
1 | import pandas as pd |
hue参数
hue
参数是用来控制第三个变量的颜色显示的。比如我们在以上图的基础之上体现出星期几的参数,那么可以通过以下代码来实现:
1 | import pandas as pd |
添加col和row参数
col
和row
,可以将图根据某个属性的值的个数分割成多列或者多行。比如在以上图的基础之上我们想要把Lunch(午餐)
和Dinner(晚餐)
分割成两个图来显示,那么可以通过以下代码来实现:
1 | import pandas as pd |
绘制折线图
relplot
通过设置kind="line"
可以绘制折线图。并且他的功能比plt.plot
更加强大。plot
只能指定具体的x
和y
轴的数据(比如x轴是N个数,y轴也必须为N个数)。而relplot
则可以在自动在两组数据中进行计算绘图。示例代码如下:
1 | import pandas as pd |
分类绘图
分类图的绘制,采用的是sns.catplot
来实现的。cat
是category
的简写。这个方法默认绘制的是分类散点图
,如果想要绘制其他类型的图,同样也是通过kind
参数来指定。
主要分为
- 分类散点图
- 分类分布图
- 分类统计图
分类散点图
分类散点图比较适合数据量不是很多的情况,他是用catplot
来实现,但是也有以下两个特别的方法。
- stripplot():catplot(kind=”strip”) 默认的
- swarmplot():catplot(kind=”swarm”)
1 | import pandas as pd |
1 | import pandas as pd |
分类分布图
分类分布图,主要是根据分类来看,然后在每个分类下数据的分布情况。也是通过catplot
来实现,以下三个方法分别是不同的kind
参数:
- 箱型图:boxplot() (with kind=”box”)
- 小提琴图:violinplot() (with kind=”violin”)
箱型图
1 | import pandas as pd |
小提琴图
小提琴实际上就是两个对称的核密度曲线合并起来,然后中间是一个箱线图(也可以为其他图)组成的。通过小提琴图可以看出数据的分布情况。示例代码如下:
1 | import pandas as pd |
分类统计图
分类统计图,则是根据分类,统计每个分类下的数据的个数或者比例。有以下几种方式:
- 条形图:barplot() (with kind=”bar”)
- 柱状图:countplot() (with kind=”count”)
- 点线图:pointplot() (with kind=”point”)
条形图
seaborn
中的条形图具有统计功能,可以统计出比例,平均数,也可以按照你想要的统计函数来统计。示例代码如下:
1 | import pandas as pd |
柱状图
柱状图是专门用来统计某个单一变量出现数量的图形。示例代码如下:
1 | import pandas as pd |
点线图
点线图可以非常方便的看到变量之间的趋势变化。示例代码如下:
1 | import pandas as pd |
分布绘图
分布绘图主要分为单变量分布以及二变量分布和pairplot
单变量分布
单一变量主要就是通过直方图来绘制。在seaborn
中直方图的绘制采用的是distplot
,其中dist
是distribution
的简写,不是histogram
的简写。示例代码如下:
1 | import pandas as pd |
二变量分布
多变量分布图可以看出两个变量之间的分布关系。一般都是采用多个图进行表示。多变量分布图采用的函数是jointplot
。
1 | import pandas as pd |
- 通过设置
kind='reg'
可以设置回归绘图和核密度曲线
1 | import pandas as pd |
- 通过设置
kind='hex'
可以绘制六边形图
1 | import pandas as pd |
jointplot其它常用参数
x,y,data
:绘制图的数据。kind
:scatter
、reg
、resid
、kde
、hex
。color
:绘制元素的颜色。height
:图的大小,图会是一个正方形。ratio
:主图和副图的比例,只能为一个整形。space
:主图和副图的间距。dropna
:是否需要删除x
或者y
值中出现了NAN
的值。marginal_kws
:副图的一些属性,比如设置bins
、rug
等。
pairplot:观察变量两两之间的关系
1 | import pandas as pd |
默认情况下,对角线的图(x和y轴的列相同)是直方图,其他地方的图是散点图,如果想要修改这两种图,可以通过diag_kind
和kind
来实现。其中这两个参数可取的值为:
diag_kind
:auto
,hist
,kde
。kind
:scatter
,reg
。
1 | import pandas as pd |
线性回归绘图
线性回归图可以帮助我们看到数据的关系趋势。在seaborn
中可以通过regplot
和lmplot
两个函数来实现。regplot
的x
和y
可以为Numpy数组
、Series
等变量。而lmplot
的x
和y
则必须为字符串,并且data
的值不能为空:
regplot(x,y,data=None)
。lmplot(x,y,data)
。
1 | import pandas as pd |
FacetGrid结构图
relplot
、catplot
、lmplot
可以通过col
、row
等在一个Figure
中绘制多个图。这些函数之所以有这些功能,是因为他们的底层使用了FacetGrid
来组装这些图形。
Axes绘图
实际上seaborn
的绘图函数中也有大量的直接使用Axes
进行绘图的,凡是函数名中已经明确显示了这个图的类型,这种图都是使用Axes
绘图的。比如sns.scatterplot
、sns.lineplot
、sns.barplot
等。Axes
绘图可以直接使用之前matplotlib
的一些方式设置图的元素。
1 | import pandas as pd |
注意
- 凡是函数名中已经明确了图的类型,都是直接使用
Axes
进行绘图。构建子图需结合matplotlib
- 直接使用
Axes
绘图,参数更加灵活(可以使用标签索引或字符串) relplot/catplot/lmplot
等函数都是用的FacetGrid
方法技术FaceGrid
可以通过col
和row
等参数来一次性构建多个图形FacetGrid
绘图的x
和y
参数,必须为DataFrame
的列的名字(字符串)
FacetGrid使用
- 先创建一个
FacetGrid
对象 - 再调用这个对象的
map
方法 map
的第一个参数是函数- 后续map通过调用该函数绘制图形
- 后面的参数是传给函数的参数
1 | import pandas as pd |
其中第一个参数是可以绘制Axes
图,并且可以接收color
参数的函数。
参数 | 描述 | FacetGrid函数 |
---|---|---|
plt.plot /sns.lineplot |
绘制折线图 | sns.relplot(kind="line") |
plt.hexbin |
绘制六边形图形 | sns.jointplot(kind="hex") |
plt.scatter /sns.scatterplot |
绘制散点图 | sns.relplot(kind="scatter") |
plt.hist |
绘制直方图 | sns.distplot |
sns.stripplot |
绘制分类散点图 | sns.catplot(kind="strip") |
sns.swarmplot |
散开来的分类散点图 | sns.catplot(kind="swarm") |
sns.violinplot |
绘制小提琴图 | sns.catplot(kind="violin") |
sns.pointplot |
绘制点线图 | sns.catplot(kind="point") |
sns.barplot |
绘制条形图 | sns.catplot(kind="bar") |
sns.countplot |
绘制数量柱状图 | sns.catplot(kind="count") |
sns.regplot |
带有回归线的散点图 | sns.lmplot |
设置图形的尺寸
使用FacetGrid
绘制出图形后,有时候我们想设置每个图形的尺寸或者是宽高比,那么我们可以通过在FacetGrid
中设置height
和aspect
来实现,其中height
表示的是每个图形的尺寸(默认是宽高一致),aspect
表示的是宽度/高度
的比例。
1 | import pandas as pd |
设置图例
默认情况下,不会添加图例,我们可以通过g.add_legend()
来添加图例。
1 | g = sns.FacetGrid(tips,col="day",hue="time") |
注意:
- 通过
title
来控制图例的标题。 - 通过
label_order
来控制图例元素的顺序。
1 | import pandas as pd |
1 | [Text(0, 0, 'Dinner'), Text(0, 0, 'Lunch')] |
设置标题
设置标题可以通过g.set_titles(template=None,row_template=None,col_template=None)
来实现,这三个参数分别代表的意义如下:
template
:给图设置标题,其中有{row_var}:绘制每行图像的名称
,{row_name}:绘制每行图像的值
,{col_var}:绘制每列图像的名称
,{col_name}:绘制每列图像的值
这几个参数可以使用。col_template
:给图像设置列的标题。其中有{col_var}
以及{col_name}
可以使用。row_template
:给图像设置行的标题。其中有{row_var}
以及{row_name}
可以使用。
设置坐标轴
g.set_axis_labels(x_var,y_var)
:一次性设置x
和y
的坐标的标题。
1 | import pandas as pd |
Seaborn样式风格设置
用seaborn
绘图,比直接使用matplotlib
绘图更加的美观。原因就是因为seaborn
中已经将一些属性的样式进行了调整。我们可以直接使用,也可以修改他的样式。
风格设置函数
在seaborn
中,可以通过三个函数来设置样式。分别是sns.set_style
、sns.axes_style
以及sns.set
方法。
sns.axes_style
- 如果没有传任何参数 返回的是字段属性
- 临时的样式
1 | import pandas as pd |
sns.set_style()
这个函数跟sns.axes_style
一样,也是用来设置绘图风格。但是这个函数的风格设置,不是临时的,而是一旦设置了,那么下面的所有绘图都是用这个风格。
1 | sns.set_style("darkgrid") |
sns.set
set
方法也是用来设置样式的,他的功能更加强大。除了style
以外,还可以设置调色板,字体,字体大小,颜色等,也可以设置其他的matplotlib.rcParams
可以接收的参数。
1 | import pandas as pd |
调色盘设置
seaborn
可以非常迅速的做出优美的图形,其中就应该得力于他的调色盘机制。seaborn
根据应用场景提供了三种不同类型的调色盘:定性的
、连续的
、发散的
。
定性调色盘
定性调色盘。一般在数据不连续,比较离散,想体现分类的情况下使用。
默认调色盘
在seaborn
中,默认情况下就设置了一些颜色供绘图使用。使用sns.color_palette
即可获取。并且我们可以通过sns.palplot
来绘制调色盘。
1 | current_palette = sns.color_palette() |
默认的调色盘有10中颜色。这些颜色都有6中风格。分别是:deep
,muted
,pastel
, bright
,dark
,colorblind
。这几种风格的颜色不变,主要调整的是亮度和饱和度。
1 | current_palette = sns.color_palette("dark") |
hls圆形颜色系统
hls
圆形颜色系统是颜色按照顺序,经过偏移,无缝形成一个圆形。我们在使用这个调色盘的时候,可以指定需要使用多少种颜色。
1 | sns.palplot(sns.color_palette("hls",20)) |
也可以使用另外一个函数sns.hls_palette(n_colors=6, h=0.01, l=0.6, s=0.65)
来实现。这个函数可以传递更多的参数。比如我们可以通过更改hue
来更改开始的颜色,通过更改l
来调整亮度,通过更改s
来调整饱和度。
1 | sns.palplot(sns.hls_palette(10,h=0.4,l=0.4,s=0.5)) |
另外也可以通过sns.husl_palette
来实现色系的调整,这个方法比sns.hls_palette
亮度和饱和度更加的均匀。
1 | sns.palplot(sns.husl_palette(10)) |
分类颜色
分类颜色是seaborn
已经提前给你定义了一些颜色,使用这些颜色在做分类分组的时候可以按照自己的需求选择。
1 | sns.palplot(sns.color_palette("Paired")) |
关于分类的颜色选择,可以通过sns.choose_colorbrewer_palette("qualitative")
来查看。这个方法只能用在jupyter notebook
中。可以选择不同的样式,然后还可以调节饱和度等。
用xkcd颜色
xkcd
是一个漫画名称或者是工作室。xkcd
开展了一项众包活动,为随机的RGB
颜色命名。这产生了一组954
种命名颜色。我们可以从sns.xkcd_palette
里面提取颜色。提取到后,如果想要用在palette
参数中,那么还需要放到sns.xkcd_palette
中。所有的xkcd
颜色的名称可以参考官网:https://xkcd.com/color/rgb/
。
1 | # 获取名字为blue green的颜色 |
连续的颜色盘
有时候我们绘图的时候,想要使用一个同种色系,但是不同深浅,这时候就可以使用连续的颜色盘。
1 | sns.palplot(sns.color_palette("Blues")) |
默认颜色是从浅入深,如果想要从深变浅,那么可以在色系后加一个_r
。
1 | sns.palplot(sns.color_palette("Blues_r")) |
我们也可以通过sns.choose_colorbrewer_palette("sequential")
查看有哪些色系可供选择。
离散的色盘
离散的色盘,是两边的颜色逐渐加深,中间的颜色最淡。或者是中间的颜色最深,两边的颜色最淡。一般离散的色盘可以用于比如温度,零度以上可以用红色表示,零度以下用蓝色表示。越红的地方,表示温度越高,越蓝的地方,表示温度越低。
1 | values = [12,15,17,18,-5,-10] |
也可以通过sns.choose_colorbrewer_palette("diverging")
查看离散的色盘有哪些可以选择。
官方文档
https://seaborn.pydata.org/tutorial/color_palettes.html
。