Python数据分析11——Seaborn绘图

目录

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介绍

Seaborn 是一个基于 matplotlib 且数据结构与 pandas 统一的统计图制作库。他提前已经定义好了一套自己的风格。然后也封装了一系列的方便的绘图函数,之前通过 matplotlib 需要很多代码才能实现完成的图,使用 seaborn 可能非常简单,一行代码搞定。

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绘图风格

在seaborn中,可以通过三个函数来设置样式。分别是 sns.set_style;sns.axes_style;sns.set 方法。

sns.axes_style

(1)如果没有传任何参数,返回的是字段属性;

(2)临时的样式;

with sns.axes_style("dark",{"ytick.left":True}):
    sns.scatterplot(x="total_bill",y="tip",data=tips)

例如:

 

sns.set_style()

这个函数和 sns.axes_style 一样,也是用来设置绘图风格的。但是这个函数的风格设置,不是临时的,而是一旦设置了,那么下面所有绘图风格都会用这个风格。

sns.set_style("darkgrid")
sns.scatterplot(x="total_bill",y="tip",data=tips)

例如:

 

sns.set

set 方法也是用来设置样式的,它的功能更加强大。除了 style 以外,还可以设置调色板,字体,字体大小,颜色等,也可以设置其它的 matplotlib.rcParams可以接受的参数。

sns.set(rc={"lines.linewidth":4})
fmri = sns.load_dataset("fmri")
sns.lineplot(x="timepoint",y="signal",data=fmri)

例如:

 

sns.despine

移除轴脊柱函数;

例如:

Seaborn颜色风格

不推荐使用(使用起来不是很方便)这里不做过多的描述。

实例:

 

 

Seaborn在Axes绘图

实际上 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])

例如绘制条形图

绘制散点图

 

Seaborn绘图

关系型绘图

seaborn.relplot()

这个函数功能非常强大,可以用来表示多个变量之间的关联关系。默认情况下是绘制散点图,也可以绘制线型图,具体绘制什么图形是通过 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)

hun参数 

hue 参数是用来控制第三个变量的颜色显示的。比如我们在以上图的基础上体现出星期几的参数,那么可以通过以下代码来实现:

sns.relplot(x="total_bill",y="tip",hue="day",data=tips)

添加col和row参数 

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")

pairplot 

通常用来机器学习建立模型之前选择合适的模型。

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)。

补充

热力图和EDA探索性分析 

#输入需要使用的库
%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()

物联沃分享整理
物联沃-IOTWORD物联网 » Python数据分析11——Seaborn绘图

发表评论