目录
Seaborn介绍
Seaborn安装
官方文档
Seaborn绘图风格
sns.axes_style
sns.set_style()
sns.set
sns.despine
Seaborn颜色风格
Seaborn在Axes绘图
Seaborn绘图
关系型绘图
seaborn.relplot()
基本使用
hun参数
添加col和row参数
绘制折线图
分类绘图
分类散点图
分类分布图
分类统计图
条形图
柱形图
点线图
分布绘图
单变量分布
二变量分布
pairplot
线性回归绘图
补充
热力图和EDA探索性分析
Seaborn 是一个基于 matplotlib 且数据结构与 pandas 统一的统计图制作库。他提前已经定义好了一套自己的风格。然后也封装了一系列的方便的绘图函数,之前通过 matplotlib 需要很多代码才能实现完成的图,使用 seaborn 可能非常简单,一行代码搞定。
1.通过 pip:pip install seaborn;
2.通过 anaconda:conda install seaborn;
官网:seaborn: statistical data visualization — seaborn 0.11.2 documentation (pydata.org)http://seaborn.pydata.org/
中文学习文档:
An introduction to seaborn-Seaborn 0.9 中文文档 (cntofu.com)https://www.cntofu.com/book/172/docs/1.md
在seaborn中,可以通过三个函数来设置样式。分别是 sns.set_style;sns.axes_style;sns.set 方法。
(1)如果没有传任何参数,返回的是字段属性;
(2)临时的样式;
with sns.axes_style("dark",{"ytick.left":True}):
sns.scatterplot(x="total_bill",y="tip",data=tips)
例如:
这个函数和 sns.axes_style 一样,也是用来设置绘图风格的。但是这个函数的风格设置,不是临时的,而是一旦设置了,那么下面所有绘图风格都会用这个风格。
sns.set_style("darkgrid")
sns.scatterplot(x="total_bill",y="tip",data=tips)
例如:
set 方法也是用来设置样式的,它的功能更加强大。除了 style 以外,还可以设置调色板,字体,字体大小,颜色等,也可以设置其它的 matplotlib.rcParams可以接受的参数。
sns.set(rc={"lines.linewidth":4})
fmri = sns.load_dataset("fmri")
sns.lineplot(x="timepoint",y="signal",data=fmri)
例如:
移除轴脊柱函数;
例如:
不推荐使用(使用起来不是很方便)这里不做过多的描述。
实例:
实际上 seaborn 的绘图函数中也有大量的直接使用 Axes 进行绘图的,凡是函数名中已经明确了这个图的类型,这种图都是使用 Axes 绘图的。比如 sns.scatterplot,sns.lineplot,sns.barplot 等。Axes绘图可以直接使用之前 matplotlib 的一些设置图的元素。
fig,ax = plt.subplots(1,2,figsize=(20,5))
sns.scatterplot(x="total_bill",y="tip",data=tips,ax=ax[0])
sns.barplot(x="day",y="total_bill",data=tips,ax=ax[1])
例如绘制条形图
绘制散点图
这个函数功能非常强大,可以用来表示多个变量之间的关联关系。默认情况下是绘制散点图,也可以绘制线型图,具体绘制什么图形是通过 kind 参数来决定的。实际上一下两个函数就是relplot的特例:
散点类型:scatterplot -> relplot(kind="scatter");
线性类型:lineplot -> replot(kind="line");
import seaborn as sns
tips = sns.load_dataset("tips",cache=True)
sns.relplot(x="total_bill",y="tip",data=tips)
hue 参数是用来控制第三个变量的颜色显示的。比如我们在以上图的基础上体现出星期几的参数,那么可以通过以下代码来实现:
sns.relplot(x="total_bill",y="tip",hue="day",data=tips)
col 和 row ,可以将图根据某个属性的值的个数分割成多列或者多行。比如在以上图的基础上我们想要把 lunch 和 dinner 分割成两个图显示,则:
# col_wrap=1 控制换行
# size 点的大小
sns.relplot(x='total_bill',y='tip',data=tips,col='time',col_wrap=1,size="size")
sns.relplot(x='total_bill',y='tip',data=tips,col='time')
relplot 通过设置 kind="line" 可以绘制折线图。并且它的功能比 plt.plot 更加强大。plot只能指定具体的 x轴和y轴的数据。而 relplot 则可以在自动在两组数据中进行计算绘图。
"""
需求:signal与timepoint变化关系 --- > 折线图
读图
线 --- 均值
阴影 --- 置信区间
ci=None
style:region 不同区域使用线条样式不一样
"""
sns.relplot(x='timepoint',y='signal',data=fmri,kind='line',ci=None,hue="region",col="event",style="region")
分类图的绘制,采用的是 sns.catplot 来实现的。cat是category的简写,这个方法默认绘制的是 分类散点图,如果想要绘制其他类型的图,同样也是通过 kind 参数来指定。
主要分为
(1)分类散点图;
(2)分类分布图;
(3)分类统计图;
分类散点图比较适合数据量不是很多的情况,它是用 catplot 来实现的,但是也有一下两种特别地方法:
(1)stripplot():catplot(kind="strp")默认的;
(2)swarmplot():catplot(kind="swarm");
sns.catplot(x="day",y="total_bill",data=tips,hue="sex")
"""
分簇散点图
缺点 数据量巨大 不适用
"""
sns.catplot(x="day",y="total_bill",data=tips,hue="sex",kind="swarm")
分类分布图,主要是根据分类来看,然后在每个分类下的数据的分布情况。也是通过 catplot
来实现的,以下三个方法分别是不同的 kind 的参数:
(1)箱型图:boxplot() (kind="box")
(2)小提琴图:vioinplot() (kind=”violin")
分类统计图,则是根据分类,统计每个分类下的数据的个数或者比例。有以下几种方式:
(1)条形图:barplot() (kind="bar")
(2)柱形图:countplot() (kind="count")
(3)点线图:pointplot() (kind="point")
seaborn 中的条形图具有统计功能,可以统计处比例,平均数,也可以按照你想要的统计函数来统计。
"""
分类统计图
需求:直观体现不同日期total_bill数量
黑色线 置信区间 线条越长意味数据比较离散
estimator :函数
"""
sns.catplot(x='day',y='total_bill',data=tips,kind='bar',estimator=sum)
柱形图是专门用来统计某个单一变量出现数量的图形。
sns.catplot(x="sex",data=titanic,kind="count")
点线图可以非常方便的看到变量之间的趋势变化。
sns.catplot(x="sex",y="survived",data=titanic,kind="point",hue="class")
分布绘图主要分为单变量分布以及二变量分布和pairplot;
单一变量主要就是通过直方图控制的,在 seaborn 种直方图的绘制采用的是 distplot,其中 dist 是 distribution的简写,不是 histogram 的简写。
titanic = pd.read_csv("./seaborn-data-master/titanic.csv")
titanic.head()
sns.distplot(titanic["age"])
参数变化
"""
需求:观察所有人年龄的分布情况
单变量分布图 -- > 直方图
- kde 是否展示kde曲线
- bins 指定组数
- rug 越密集数据越集中
- hist 是否展示直方图
"""
sns.distplot(age_titanic['age'],bins=30,rug=True,hist=False)
多变量分布图可以看出两个变量之间的分布关系。一般都是采用多个图进行表示。多变量分布图采用的函数是 jointplot。
"""
二变量分布
kind='hex' 六边形的点
gridsize 点的大小
height 图形大小 20*20
ratio 主图和副图之间比例
space 主图和副图之间距离
marginal_kws
"""
sns.jointplot(x='total_bill',y='tip',data=tips,kind='hex',gridsize=15,height=5,ratio=3,space=0,marginal_kws={"rug":True,"kde":True},color="red")
通常用来机器学习建立模型之前选择合适的模型。
sns.pairplot(tips,vars=["total_bill","tip"])
线性回归图可以帮助我们看到数据的关系趋势。在 seaborn 种可以通过 regplot 和lmplot两个函数实现。regplot 的 x 和 y 可以为 Numpy数组,Series等变量。而lmplot的x和y必须为字符串,并且 data的值不能为空:
(1)regplot(x,y,data=None);
(2)lmplot(x,y,data)。
#输入需要使用的库
%matplotlib inline
import pandas as pd
import numpy as np
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
import seaborn as sns
from pandas_profiling import ProfileReport
"""数据分析"""
#热力图
# 分析各特征之间的相关性并可视化。
plt.figure(figsize=(15,10))
sns.heatmap(dataset.corr(),annot=True)
#EDA探索性分析
profile = ProfileReport(dataset, title='EDA', explorative=True)
#"第一个不行用第二个" https://blog.csdn.net/weixin_44527237/article/details/110096564
profile.to_widgets()
profile.to_notebook_iframe()