Seaborn学习笔记(1)

简介

Seaborn是一种基于matplotlib的图形可视化库。他提前已经定义好了一套自己的风格。然后也封装了一系列的方便的绘图函数,之前通过matplotlib需要很多代码才能完成的绘图,使用seaborn可能就是一行代码的事情。
学习链接:https://www.bilibili.com/video/BV1tA411H7cQ?p=1
官网:https://seaborn.pydata.org/tutorial.html

安装

通过pip install seaborn即可安装

Seaborn关系绘图

relplot

这个函数功能非常强大,可以用来表示多个变量之间的关联关系。默认情况下是绘制散点图,也可以绘制线性图。

scatterplot:relplot(kind=‘scatter’)。
lineplot:relplot(kind=‘line’)。

基本使用

import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips", cache=True, data_home='./seaborn-data-master')
print(tips.sample(5))
sns.relplot(x="total_bill", y="tip", data=tips)
plt.show()
#      total_bill   tip     sex smoker   day    time  size
# 22        15.77  2.23  Female     No   Sat  Dinner     2
# 140       17.47  3.50  Female     No  Thur   Lunch     2
# 102       44.30  2.50  Female    Yes   Sat  Dinner     3
# 178        9.60  4.00  Female    Yes   Sun  Dinner     2
# 49        18.04  3.00    Male     No   Sun  Dinner     2

在这里插入图片描述

hue参数

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

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

在这里插入图片描述

col和row参数:

col和row,可以将图根据某个属性的值的个数分割成多列或者多行。比如在以上图的基础之上我们想要把Lunch(午餐)和Dinner(晚餐)分割成两个图来显示,那么可以通过以下代码来实现:

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

在这里插入图片描述
也可以再在row上添加一个新的变量,比如把性别按照行显示出来,代码如下:

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

在这里插入图片描述

指定具体的列

有时候我们的图有很多,默认情况下会在一行中全部展示出来,那么我们可以通过col_wrap来指定具体多少列。示例代码如下:

sns.relplot(x="total_bill",y="tip",col="day",col_wrap=2,data=tips)

在这里插入图片描述

绘制折线图

relplot通过设置kind="line"可以绘制折线图。并且他的功能比plt.plot更加强大。plot只能指定具体的x和y轴的数据(比如x轴是N个数,y轴也必须为N个数)。而relplot则可以在自动在两组数据中进行计算绘图。示例代码如下:

import seaborn as sns
import matplotlib.pyplot as plt
fmri = sns.load_dataset("fmri",data_home='./seaborn-data-master')
sns.relplot(x="timepoint",y="signal",kind="line",data=fmri)
plt.show()

在这里插入图片描述
当然也可以添加其他的参数,用来控制整个图的样式和结构。示例代码如下:

# 设置hue为event,就会根据event来绘制不同的颜色
# 设置col为region,就会根据region值的个数来绘制指定个数的图
# 设置style为event,就会根据event来设置线条的样式
sns.relplot(x="timepoint",y="signal",kind="line",hue="event",col="region",style="event",data=fmri)

在这里插入图片描述

Seaborn分类绘图

分类图的绘制,采用的是sns.catplot来实现的。cat是category的简写。这个方法默认绘制的是分类散点图,如果想要绘制其他类型的图,同样也是通过kind参数来指定。并且分类绘图中,分成分类散点图,分类分布图,分类统计图。

分类散点图

分类散点图比较适合数据量不是很多的情况,他是用catplot来实现,但是也有以下两个特别的方法。

stripplot():catplot(kind=“strip”),默认的。
swarmplot():catplot(kind=“swarm”)。

sns.catplot(x="day",y="total_bill",hue="sex",data=tips)

在这里插入图片描述
以上图展示的是按照星期几的分类散点图,看起来这些点有点重合,如果想要散开来,那么可以使用catplot(kind=“swarm”)。示例代码如下:

sns.catplot(x="day",y="total_bill",kind="swarm",data=tips,hue="sex")

在这里插入图片描述
catplot方法不能使用size和style参数。

横向分类散点图

想要将垂直的分类散点图变成横向的,只需要把x和y对应的值进行互换即可。

sns.catplot(y="day",x="total_bill",kind="swarm",data=tips,hue="sex")

在这里插入图片描述

分类分布图

分类分布图,主要是根据分类来看,然后在每个分类下数据的分布情况。也是通过catplot来实现,以下两个方法分别是不同的kind参数:

boxplot():catplot(kind=“box”)。
violinplot():catplot(kind=“violin”)。

箱线图

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
athletes = pd.read_csv("athlete_events.csv")
countries = {'CHN':'中国','JPN':"日本",'KOR':'韩国','USA':"美国",'CAN':"加拿大",'BRA':"巴西",'GBR':"英国",'FRA':"法国",'ITA':"意大利",'ETH':"埃塞俄比亚",'KEN':"肯尼亚",'NIG':"尼日利亚",}
plt.rcParams['font.sans-serif'] = ['FangSong']
need_athletes = athletes[athletes['NOC'].isin(list(countries.keys()))]
g = sns.catplot(x="NOC",y="Height",data=need_athletes,kind="box",hue="Sex")
g.fig.set_size_inches(20,5)
g.set_xticklabels(list(countries.values()))
plt.show()

在这里插入图片描述

小提琴图

小提琴实际上就是两个对称的核密度曲线合并起来,然后中间是一个箱线图(也可以为其他图)组成的。通过小提琴图可以看出数据的分布情况。示例代码如下:

sns.catplot(x="day",y="total_bill",data=tips,kind="violin",hue="sex",split=True)

在这里插入图片描述
小提琴的中间默认绘制的是箱线图,也可以修改为其他类型的。可以通过inner参数修改,这个参数有以下几个选项:

  1. box:默认的,箱线图。
  2. quartile:四分位数。上下四分位数加中位数。
    在这里插入图片描述
  3. point:散点
    在这里插入图片描述
  4. stick:线条
    在这里插入图片描述

分类统计图

分类统计图,则是根据分类,统计每个分类下的数据的个数或者比例。有以下几种方式:

barplot():catplot(kind=“bar”)。
pointplot():catplot(kind=“point”)。
countplot():catplot(kind=“count”)。

条形图

seaborn中的条形图具有统计功能,可以统计出比例,平均数,也可以按照你想要的统计函数来统计。

  1. 统计平均数:
 # 统计星期三到星期天的消费总额的平均数
 sns.catplot(x="day",y="total_bill",data=tips,kind="bar")

在这里插入图片描述

  1. 统计比例:
 # 统计男女中获救的比例
 sns.catplot(data=titanic,kind="bar",x="sex",y="survived")

在这里插入图片描述

  1. 自定义统计函数:
 # 自定义统计函数,统计出每个性别下获救的人数
 sns.barplot(x="sex",y="survived",data=titanic,estimator=lambda values:sum(values))

在这里插入图片描述

柱状图

柱状图是专门用来统计某个单一变量出现数量的图形。

sns.catplot(x="sex",data=titanic,kind="count")

在这里插入图片描述
也可以通过使用hue参数来指定分组:

sns.catplot(x="sex",kind="count",data=tips,hue="day")

在这里插入图片描述

点线图

点线图可以非常方便的看到变量之间的趋势变化。

sns.catplot(x="sex",y="survived",data=titanic,kind="point",hue="class")

在这里插入图片描述

Seaborn分布绘图

单变量分布

单一变量主要就是通过直方图来绘制。在seaborn中直方图的绘制采用的是distplot,其中dist是distribution的简写

sns.set(color_codes=True)
titanic = titanic[~np.isnan(titanic['age'])]
sns.distplot(titanic['age'])

在这里插入图片描述
有以下常用参数:

  1. kde(核密度曲线):这个代表是否要显示kde曲线,默认是显示的,如果显示kde曲线,那么y轴表示的就是概率,而不是数量。也可以设置为False关掉。
 sns.distplot(titanic['age'],kde=False)

在这里插入图片描述

  1. bins:代表这个直方图显示的数量。也可以通过自己设置。
sns.distplot(titanic['age'],bins=30)

在这里插入图片描述

  1. rug:代表是否需要显示底部的胡须下线,下面的胡须线越密集的地方,说明数据量越多。
 sns.distplot(titanic['age'],rug=True)

在这里插入图片描述

二变量分布

散点图

sns.jointplot(x="total_bill", y="tip", data=tips)

在这里插入图片描述
通过设置kind='reg’可以设置回归绘图和核密度曲线。

sns.jointplot(x="total_bill", y="tip", data=tips,kind="reg")

在这里插入图片描述

六边形图

对于一些数据量特别大的数据,用散点图不太利于观察,以采用六边形图来绘制,也就是将之前的散点变成六边形,六边形有一个区间大小,之前这些点落在这个六边形中越多颜色越深。通过gridsize设置六边形个数。

athletes = pd.read_csv("athlete_events.csv")
china_athletes = athletes[athletes['NOC']=='CHN']
sns.jointplot(x="Height",y="Weight",data=china_athletes,kind="hex",gridsize=20)

在这里插入图片描述
jointplot其他常用参数:
x,y,data:绘制图的数据。
kind:scatter、reg、resid、kde、hex。
color:绘制元素的颜色。
height:图的大小,图会是一个正方形。
ratio:主图和副图的比例,只能为一个整形。
space:主图和副图的间距。
dropna:是否需要删除x或者y值中出现了NAN的值。
marginal_kws:副图的一些属性,比如设置bins、rug等。

成对绘图(pairplot)

pairplot可以把某个数据集中某几个字段之间的关系图一次性绘制出来。比如iris鸢尾花数据,我们想要看到petal_width、petal_height、sepal_width以及sepal_height之间的关系,那么我们就可以通过pairplot来绘制。

sns.pairplot(iris,vars=['sepal_length',"sepal_width",'petal_length','petal_width'])

在这里插入图片描述
默认情况下,对角线的图是直方图,其他地方的图是散点图,如果想要修改这两种图,可以通过diag_kind和kind来实现。其中这两个参数可取的值为:
diag_kind:auto, hist, kde。
kind:scatter, reg。

sns.pairplot(iris,vars=['sepal_length',"sepal_width",'petal_length','petal_width'],diag_kind="kde",kind="reg")

在这里插入图片描述

线性回归绘图

线性回归图可以帮助我们看到数据的关系趋势。在seaborn中可以通过regplot和lmplot两个函数来实现。regplot的x和y可以为Numpy数组、Series等变量。而lmplot的x和y则必须为字符串,并且data的值不能为空:
regplot(x,y,data=None)。
lmplot(x,y,data)。

sns.lmplot(x="total_bill",y="tip",data=tips)

在这里插入图片描述

sns.regplot(x=tips["total_bill"],y=tips["tip"])

在这里插入图片描述
【注】:部分资源来源于网络,若侵犯了您的权利,请与作者联系,感谢!

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值