查看原文
其他

【数据可视化】统计图绘制神器:Seaborn

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:寇晓璇,中南财经政法大学统计与数学学院

本文编辑:石  艳

技术总编:陈  鼎

Stata&Python云端课程来啦!

     寒雪梅中尽,春风柳上归。为了感谢大家长久以来的支持和信任,爬虫俱乐部为大家送福利啦!!!Stata&python特惠课程双双上线腾讯课堂~原价2400元的Python编程培训课程,现在仅需100元,详情请查看推文《Python云端课程福利大放送!0基础也能学~》;原价600元的正则表达式课程,现在仅需49.9元,详情请查看推文《与春天有个约会,爬虫俱乐部重磅推出正则表达式网络课程!》;原价600元的基本字符串函数课程,现在仅需49.9元,更多信息请查看推文《与春天有个约会,爬虫俱乐部重磅推出基本字符串函数网络课程;原价600元的网络爬虫课程,现在仅需49.9元,更多信息请查看推文《与春天有个约会,爬虫俱乐部重磅推出网络爬虫专题课程》原价600元的文本分析课程,现在仅需49.9元,更多信息请查看推文与春天有个约会,爬虫俱乐部重磅推出文本分析网络课程。变的是价格,不变的是课程质量和答疑服务。对报名有任何疑问欢迎在公众号后台和腾讯课堂留言哦!



导读
若要直观地反应一组数据的统计特征,一图胜过千万言语。近期小编有若干统计图需要绘制,在学习的过程中发现了一个很好用的工具,它可以简单直观地绘制出常用的统计图。它就是Seaborn库。
Seaborn是基于Matplotlib开发的高阶Python数据可视化图库。用户能够做出各种有吸引力的统计图表,例如条形图、散点图、箱线图等。

一、Seaborn创建图形的基本步骤
使用Seaborn创建图形主要分为以下六个步骤:
  • 导入Seaborn库

  • 准备数据

  • 设置画布外观

  • 使用Seaborn绘图

  • 自定义图形

  • 保存、显示图形

代码如下:
1#第一步:导入Seaborn库,以及其他可能用到的各类模块
2import seaborn as sns
3import matplotlib.pyplot as plt
4import numpy as np
5import pandas as pd
6
7#第二步:准备数据,导入Seaborn内置数据tips。也可以通过pandas导入本地数据。
8tips = sns.load_dataset("tips")
9
10#第三步:设置画布外观为“whitegrid”
11sns.set_style("whitegrid")
12
13#第四步:使用Seaborn绘图(以回归线为例)
14g = sns.lmplot(x="tip",y="total_bill",data=tips,aspect=2)
15
16#第五步:自定义图形
17g.set_axis_labels("Tip","Total bill(USD)")    #设置横坐标为Tip,纵坐标为Total bill(USD)
18plt.xlim=(0,10)    #调整x轴限制
19plt.ylim(0,100)    #调整y轴限制
20plt.title("title")    #添加图形标题为“title”
21
22#第六步:保存、显示图形
23plt.savefig("tips1.png")    #将画布保存为图形
24plt.show(g)    #显示图形

小注:Seaborn自带经典数据集,在联网状态下,可通过load_dataset()接口进行获取。如果第二步出现错误,可以尝试下载并解压数据集至“系统>用户>user>seaborn-data”路径下。(数据集可以通过向公众号发送“seaborn”获取)

得到tips1.png如下图所示:


二、各类图形

1.散点图

1#先绘制一个简单的散点图
2sns.scatterplot(x="total_bill", y="tip", data=tips)
3#使用hue对变量进行分组,使用style定义类型,使用size定义点的大小,并显示具有不同颜色的组
4sns.scatterplot(x="total_bill",y="tip",hue="day",style="time",size='size',data=tips)

分布散点图是指按照不同类别对样本数据进行分组,并用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。

1#包含分类变量的散点图
2tips = sns.load_dataset("tips")
3ax = sns.stripplot(x="day", y="total_bill", data=tips)
4#增加参数jitter、palette、dodge
5ax = sns.stripplot(x="day", y="total_bill", hue="smoker",data=tips,jitter=True,palette="Set2",dodge=True)
6#jitter表示抖动程度
7#palette表示调色板
8#dodge可以设置重叠区域是否分开,当设置为True时,意味着沿分类轴将不同色调级别的条带分开。

分布密度散点图swarmplot()类似于stripplot(),但是对点调整为(只沿分类轴),这样能够更好地表示值的分布。

1#不重叠分类的散点图
2sns.swarmplot(x="day",y="total_bill",data=tips)
3#增加几个参数
4sns.swarmplot(x="day",y="total_bill",hue="smoker",data=tips,palette="Set2",dodge=True)

2.线图

线图lineplot()会将同一x轴下的多个y轴的统计量(默认为均值)作为折线图中的点的位置,并辅以阴影表达其置信区间,用于快速观察点的分布趋势。

1#导入数据集fmri
2fmri = sns.load_dataset("fmri")
3x1=sns.lineplot(x="timepoint", y="signal", data=fmri,ci=0)
4#ci=0的目的是去除默认置信区间阴影部分
5x2=sns.lineplot(x="timepoint",y="signal",hue="event",style="event",markers=True,dashes=False,data=fmri)

3.条形图

1#导入titanic内置数据集
2titanic = sns.load_dataset("titanic")
3#用散点图示符显示点估计值和置信区间
4sns.barplot(x="sex",y="survived",hue="class",data=titanic)

4.箱线图

箱线图boxplot()用于显示数值型数据的分布情况。框显示数据集的四分位数,线显示分布的其余部分,可以显示出一组数据的最大值、最小值、中位数及上下四分位数。
1#箱线图
2sns.boxplot(x="alive",y="age",hue="adult_male",data=titanic)
3#使用宽表数据的箱线图
4iris = sns.load_dataset("iris")
5sns.boxplot(data=iris,orient="h")
6#箱线图+分布散点图
7sns.boxplot(x="tip", y="day", data=tips, whis=np.inf)
8sns.stripplot(x="tip", y="day", data=tips,jitter=True, color="c")
9#箱线图+分布密度散点图
10sns.boxplot(x="tip", y="day", data=tips, whis=np.inf)
11sns.swarmplot(x="tip", y="day", data=tips, color="c")

5.点图

点图代表散点图位置的数值变量的中心趋势估计,并使用误差线提供关于该估计的不确定性的一些指示。具体用法如下:

1sns.pointplot(x="class",y="survived",hue="sex",data=titanic)
2#使用调色板,修改标记类型和线条类型
3sns.pointplot(x="class",y="survived",hue="sex",data=titanic,palette={"male":"g","female":"m"},markers=["^","o"],linestyles=["-","--"])

6.计数图

这是一个功能比较简单的统计图表,仅用于表达各分类值计数,并以柱状图的形式展现。可以将计数图看做是一个分类直方图。具体命令如下:
1sns.countplot(x="deck",data=titanic,palette="Blues_d")

7.小提琴图

violinplot()boxplot()相似,它显示了数值型数据在一个或多个分类变量的多个层次上的分布。小提琴绘图以基础分布的核密度估计为特征,通过小提琴图可以知道哪些位置的密度较高。

1#小提琴图
2sns.violinplot(x="day", y="total_bill", data=tips)
3#按性别分类,调色板为Set2,分割,以计数的方式,不表示内部
4sns.violinplot(x="day", y="total_bill", hue="sex",data=tips, palette="Set2", split=True, scale="count", inner=None)
5#小提琴图+分布散点图
6sns.violinplot(x="tip", y="day", data=tips, inner=None,whis=np.inf)
7sns.stripplot(x="tip", y="day", data=tips,jitter=True, color="c")
8#小提琴图+分布密度散点图
9ax = sns.violinplot(x="tip", y="day", data=tips,inner=None, whis=np.inf)
10ax = sns.swarmplot(x="tip", y="day", data=tips, color="c")

8.回归图

lmplot()用于衡量变量之间关系,它会在绘制二维散点图时,自动完成回归拟合。

1g = sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips)
2#画多个回归图:将变量分为多行,并改变大小
3g = sns.lmplot(x="total_bill", y="tip", col="day", hue="day",data=tips,col_wrap=2,height=4)

9.直方图

用直方图可以比较直观地看出产品质量特性的分布形态,便于判断其总体分布情况。

1#设置随机种子(1209),随机生成1000个符合正态分布的数:
2np.random.seed(1209)
3x = np.random.randn(1000)
4sns.distplot(x)
5#修改更多参数,设置方块的数量,方块、密度曲线和边际毛毯都显示,颜色为‘k’,axlabel=‘norm’
6np.random.seed(1209)
7x = np.random.randn(1000)
8sns.distplot(x, bins=100,hist=True, kde=True, rug=True,color='k',axlabel='norm')

10.核密度图

核密度估计图可以直观地看出数据样本本身的分布特征。具体用法如下:

1#简单生成一个多元正态分布
2mean, cov = [02], [(1.5), (.51)]
3x, y = np.random.multivariate_normal(mean, cov, size=50).T
4ax = sns.kdeplot(x)
5#双变量核密度图
6ax=sns.kdeplot(x,y,shade=True,shade_lowest=False,cbar=True,color='r')

11.热力图

利用热力图可以比较数据表里多个特征间的相似度,类似于色彩矩阵。具体用法如下:

1#绘制一个简单的numpy数组热力图
2x = np.random.rand(1012)    #生成10*12矩阵
3ax = sns.heatmap(x)
4#显示数字和保留几位小数,并修改数字大小字体颜色格式
5x= np.random.rand(1010)
6ax = sns.heatmap(x,annot=True,annot_kws={'size':9,'weight':'bold','color':'w'},fmt='.2f')


三、深度自定义

1.风格设置

Seaborn当前支持的风格主要有以下5种:
1sns.set_style("whitegrid")    #白色网格背景
2sns.set_style("darkgrid")     #灰色网格背景
3sns.set_style("dark")         #灰色背景
4sns.set_style("white")        #白色背景
5sns.set_style("ticks")        #四周加边框和刻度

2.颜色配置

使用sns.color_palette()可以进行调色板设置,Seaborn有其默认调色板六个变化:deepmutedpastelbrightdarkcolorblind
可通过下述命令进行设置:
1palette = sns.color_palette("deep")
2#查看调色板
3sns.palplot(palette)

另外,也可以通过Color Brewer调色板的名称直接传递给任何颜色函数。


若想调取Blues颜色,命令如下:
1custom_palette = sns.color_palette("Blues",9)
2sns.palplot(custom_palette)


四、小结
最后,将Seaborn可视化的要点总结如下:
  • 使用Seaborn创建图形主要分为导入、绘图、自定义、保存等步骤。

  • 接口包括了常用的统计、关系、回归类图表。

  • 绝大多数绘图接口名字为XXXXplot形式。

  • 可灵活设置绘图风格、颜色等。

在进行探索性数据分析过程中,Seaborn十分高效。然而,SeabornMatplotlib的关系是互为补充而非替代:多数场合中Seaborn是绘图首选,而在某些特定场景下则仍需用Matplotlib进行更为细致的个性化定制。
最后欢迎大家一起交流讨论哦~

对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!

往期推文推荐
检索Stata推文的“任意门”
学会了这些,分分钟提升你的毕业体验

【爬虫实战】双一流大学的月关注度

【爬虫实战】“中国人不吃这一套”——人民日报微博评论分析

进化的标签管理助手——elabel命令

“学术明星”——双重差分法(DID)的Stata操作

偷懒小妙招| selenium之玩转鼠标键盘操作(上)

【爬虫实战】南京地铁又上热榜——客流量分析

renfiles:批量重命名文件的利器

Stata中字符串的处理

物以类聚——浅述k-means聚类算法

我在哪里?调用高德API获取地址经纬度信息

超级简单的条件函数,轻松生成虚拟变量

Python云端课程福利大放送!0基础也能学~

【爬虫实战】“我们,继续新故事”——爬取LOL英雄皮肤

“人像动漫化”—Python实现抖音特效

跨框架合并数据|frlink的用法,你get到了吗

《唐探3》做错了什么?|来自150万字影评的证据

爬虫俱乐部年度总结|《请回答2020》

春节假期临近,来爬爬豆瓣看看有什么好剧

putdocx生成Word文档so easy!

模糊匹配我只用这一招!

利用tushare获取财务数据

爬虫实战|Selenium爬取微信公众号标题与链接

轻轻一点,就知有没有|rqrs命令介绍

强大的正则表达式

关于我们 


微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存