Seaborn是一个基于matplotlib且数据结构与pandas统一的统计图制作库。他提前已经定义好了一套自己的风格。然后也封装了一系列的方便的绘图函数,之前通过matplotlib
需要很大代码才能完成绘图,使用seaborn
可能是一行代码的事情。
Seaborn是基于matplotlib的Python数据可视化库。它提供了用于绘制引人入胜且内容丰富的统计图形的高级界面。
pip install seaborn
这个函数功能非常强大,可以用来表示多个变量之间的关联关系。默认情况下是绘制散点图,也可以绘制线性图,具体绘制什么图形是通过seaborn.relplot(kind=None)
里面的kind
参数来决定的。实际上以下两个函数就是relplot
的特征:
seaborn.relplot(x=None,y=None,data=None,hue=None,col=None, row=None,kind=None,style=None)
# sns 为网上固定的写法,按照官网的标准
# seaborn 是基于matplotlib的封装
import seaborn as sns
import pandas as pd
from matplotlib import pyplot as plt
import numpy as np
# 读取csv文件
df = pd.read_csv('seaborn-data-master/tips.csv')
# relplot 默认情况下绘制散点图
sns.relplot(x='total_bill',y='tip',data=df,hue='day',col='time',row='sex')
# 为什么可以使用plt.show来释放,因为seaborn也是基于matplotlib来实现
plt.show()
sns.scatterplot(x=None,y=None,hue=None,data=None)
import seaborn as sns
import pandas as pd
from matplotlib import pyplot as plt
import numpy as np
df = pd.read_csv('seaborn-data-master/tips.csv')
sns.scatterplot(x='total_bill',y='tip',data=df,hue='day')
plt.show()
绘制折线图方法一
import seaborn as sns
import pandas as pd
from matplotlib import pyplot as plt
import numpy as np
df = pd.read_csv('seaborn-data-master/fmri.csv')
# kind 为指定绘制的图形
sns.relplot(x='timepoint', y='signal',data=df,kind='line',hue='region')
plt.show()
绘制折线图的方法二
import seaborn as sns
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
df = pd.read_csv('seaborn-data-master/fmri.csv')
sns.lineplot(x='timepoint', y='signal',data=df,hue='region',style='event')
# 展示图例
plt.show()
分类图的绘制,采用的是sns.catplot来实现的。cat
是categroy
的简写。这个方法默认绘制的分类散点图,如果想要绘制其他类型的图,同样也是可以通过kind
参数来指定。
图形的分类
kind
参数选择要使用的基础轴级功能:
scatterplot()
(带有kind="scatter"
;默认值)lineplot()
(带有kind=line
)seaborn.catplot 是一个将分类图绘制到FacetGrid上图级别接口。
这个函数可以访问多个轴级功能,这些轴级功能通过不同的可视化图表展示数字和一个或多个分类变量的关系。kind
参数可以选择的轴级基础函数有:
分类散点图
stripplot()
(带有kind="strip"
;默认值)swarmplot()
(带有kind="swarm"
)分类分布图
boxplot()
(带有 kind="box"
)violineplot()
(带有 kind="violin"
)boxenplt()
(带有 kind="boxen"
)分类估计图
pointplot()
(带有 kind="point"
)barplot()
(带有 kind="bar"
)countplot()
(带有 kind="count"
)sns.catplot(x=None,y=None,data=None,row=None,col=None,kind=‘strip’)
import pandas as pd
import numpy as np
import seaborn as sns
from matplotlib import pyplot as plt
df = pd.read_csv('seaborn-data-master/tips.csv')
# 日期 与 total_bill 之间的关系
sns.catplot(x='day',y='total_bill',data=df,hue='sex')
sns.stripplot(x=None,y=None,data=None,hue=None)
import pandas as pd
import numpy as np
import seaborn as sns
from matplotlib import pyplot as plt
df = pd.read_csv('seaborn-data-master/tips.csv')
sns.catplot(x='day',y='total_bill',data=df,hue='sex')
sns.swarpmply(x=None,y=None,hue=None,data=None)
sns.swarmplot(x='day',y='total_bill',data=df,hue='sex')
plt.show()
分类分布图,主要是根据分类来看,然后再每个分类下数据的分布情况。也是通过catplot
来实现,以下三个方法分别是不同的kind
参数
boxplot(x=None,y=None,data=None, palette=None,hue=None)
import seaborn as sns
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
df = pd.read_csv('athlete_events.csv')
countries = {
'CHN':'中国',
'JPN':'日本',
'KOR':'日本',
'USA':'美国',
'CAN':'加拿大',
'BRA':'巴西',
'GBR':'英国',
'FRA':'法国',
'ITA':'意大利',
'ETH':'埃塞俄比亚',
'KEN':'肯尼亚',
'NIG':'尼日利亚'
}
# 判断在countries国家的数据
# 判断国家在countries中则选择出来
# isin判断值是否在countries当中
# 布尔索引筛选出数据
my_ath = df[df['NOC'].isin(list(countries.keys()))]
# 绘制箱型图
plt.figure(figsize=(16,8))
sns.boxplot(x='NOC',y='Height',data=my_ath)
plt.show()
violinplot(x=None,y=None,data=None,inner=None)
box
,则绘制一个微型箱型图。若为quartiles
,则显示四分位数线。若为point
或stick
,则显示具体数据点或数据线。使用None
则绘制不加修饰的小提琴图。import pandas as pd
import numpy as np
import seaborn as sns
from matplotlib import pyplot as plt
# 读取数据
tips = pd.read_csv('seaborn-data-master/tips.csv')
# 绘制小提琴图
# 中间 默认箱型图 inner-->quartile 四分位数
sns.violinplot(x='day',y='total_bill',inner="quartile",data=tips,hue='sex')
plt.show()
分类统计图,则是根据分类,统计每个分类下的数据的个数或者比例。
barplot() (with kind="bar")
countplot() (with kind="count")
pointplot() (with kind="point")
seaborn
中的条线图具有统计功能,可以统计出比例,平均数,也可以按照你想要的统计函数来统计。
import seaborn as sns
import pandas as pd
import numpy as np
# 直观体现 total_bill 与 day 的统计平均数
tips = pd.read_csv('seaborn-data-master/tips.csv')
tips.head()
# 黑线 置信区间 线条越高 说明数据是比较离散的
# 默认情况下是采用平均数来进行
# estimator : 默认情况下采用平均数,我们可以指定为sum来查看数值
sns.catplot(x='day',y='total_bill',data=tips,kind='bar',estimator=sum)
plt.show()
分析泰坦尼克号获救的男女比例
titanic = pd.read_csv('seaborn-data-master/titanic.csv')
titanic.head()
# 绘制直方图查看数据
# survived : 代表着获救的人数
# 可通过estimator来指定人数
sns.catplot(x='sex',y='survived',data=titanic,kind='bar',estimator=sum)
plt.show()
titanic.head()
# count :代表为单个分类中显示值的个数
# kind = 'count' :
# 当为count的时候,只能指定x或y单个值
sns.catplot(x='sex',data=titanic,kind='count')
# 舱为 与 营救男女获救关系
# hue分组
# class 为舱位
sns.catplot(x='sex',y='survived',data=titanic,kind='point',hue='class')
分布绘图主要分为单变量分布以及二变量分布和pairplot
单一变量主要就是通过直方图来绘制。在seaborn
中直方图的绘制采用的是distplot
,其中dist
是distribution
的简写,不是histogram
的简写。
seaborn.distplot(a,bins=None,kde=True,hist=True,rug=False)
# 传入一维的数组
plt.figure(figsize=(20,8),dpi=80)
sns.distplot(titanic['age'])
plt.show()
# 传入一维的数组
plt.figure(figsize=(20,8),dpi=80)
# 当不绘制直方图时,指定hits
# 当绘制直方图,不绘制高密度曲线时 ,指定kde
sns.distplot(titanic['age'],bins=30,hist=False)
plt.show()
# 传入一维的数组
plt.figure(figsize=(20,8),dpi=80)
# 当不绘制直方图时,指定hits
# 当绘制直方图,不绘制高密度曲线时 ,指定kde
sns.distplot(titanic['age'],bins=30,hist=True,kde=False)
plt.show()
# 传入一维的数组
plt.figure(figsize=(20,8),dpi=80)
# 当不绘制直方图时,指定hits
# 当绘制直方图,不绘制高密度曲线时 ,指定kde
sns.distplot(titanic['age'],bins=30,hist=True,kde=False,rug=True)
plt.show()
多变量分布图可以看出两个变量之间的分布关系。一般都是采用多个图进行表示。多变量分布图采用的函数是jointplot
。
seaborn.jointplot(x,y,data=None,kind=‘scatter’, color=None,height=5,ratio=5,space=0.2,dropna=True)
scatter
、reg
、resid
、kde
、hex
# 多变量绘图
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
import seaborn as sns
# 读取数据
tips =pd.read_csv('seaborn-data-master/tips.csv')
sns.jointplot(x='total_bill',y='tip',data=tips,height=6)
添加回归和核密度拟合
sns.jointplot(x='total_bill',y='tip',data=tips,height=6,kind='reg')
使用六边形箱将散点图替换为联合直方图
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
import seaborn as sns
ath_data = pd.read_csv('athlete_events.csv')
# 筛选出NOC为中国数据进行比较身高数据
ath_china = ath_data[ath_data['NOC']=='CHN']
# grisize : 指定六边形的大小
# 数据对比 :中国的体重和身高集中图
sns.jointplot(x='Height',y='Weight',data=ath_china,kind='hex',gridsize=20,height=7)
# grisize : 指定六边形的大小
# 数据对比 :中国的体重和身高集中图
# kind='hex':代表为六边形
# gridsize : 为六边形的大小
# height : 图片大小
# color : 为颜色
# ration : 为子图的大小
# marginal_kws : 绘图组件的其他参数位置
# rug : rug越密集显示的数据越多
# kde : 核密度曲线
sns.jointplot(x='Height',y='Weight',data=ath_china,kind='hex',gridsize=20,height=7,color='r',ratio=2,marginal_kws={'rug':True,'kde':True})
seaborn.pairplot(data,hue=None,vars=None)
默认情况下,此函数将创建一个轴网格,以便每个变量在data
单行的y轴和单列的x轴上共享。对角轴的处理方式有所不同,绘制了一个图以显示该列中变量的数据的单变量分布。
也可以显示变量的子集或行和列上绘制不同的变量
import pandas as pd
import numpy as np
import seaborn as sns
# 读取画的数据
iris = pd.read_csv('seaborn-data-master/iris.csv')
iris.head()
# 绘制成对关系图
sns.pairplot(iris)
当指定数据集
sns.pairplot(vars=['sepal_length','sepal_width'],data=iris)
对单变量使用核密度估计
sns.pairplot(vars=['sepal_length','sepal_width'],data=iris,diag_kind='kde')