详解数据可视化神器seaborn,它可快速实现统计数据可视化

Python学习与数据挖掘      2022-02-16     391

关键词:

哈喽,大家好。今天详解 Seaborn,它基于 Matplotlib,用来制作统计图形的 Python 库。本文内容较长,建议收藏后慢慢读。

Seaborn 的优势:

  • 图表丰富,比 matplotlib 易用

  • 与 pandas 结合

  • 支持数值类型多变量关系图

  • 支持数值类型数据分布图

  • 支持类别类型数据可视化

  • 支持回归模型以及可视化

  • 轻松构建结构化多图网格

我整理了一份 seaborn 核心知识点的思维导图

为方便学习,高清原版需要的朋友,可以按照如下方式获取

获取方式

思维导图已打包放置后台了,获取方法如下:

方法1、微信搜索公众号:Python学习与数据挖掘,后台回复:seaborn
方法2、扫描二维码或者发送图片到微信识别,后台回复:seaborn

下面我们就来学习一下这个强大的 Searborn 。

1. 多变量关系图

多变量关系图其实就是二维散点图线图,可以通过这些函数来绘制:relplot()scatterplot()lineplot()

scatterplot()只能绘制散点图lineplot()只能绘制线图

relplot()都可以绘制,通过kind参数来区分:

  • kind="scatter"(默认)等价于scatterplot()

  • kind="line"等价于lineplot()

在 seaborn 中,定义一个通用函数并用kind参数指定需要绘制的图形,这种形式很常见。这样做法的好处在于,调用一个函数便可以绘制多种图形。

1.1 绘图

绘制散点图

import seaborn as sns
import pandas as pd
import numpy as np
sns.set_theme(style="darkgrid")

tips = sns.load_dataset("tips", data_home='seaborn-data', cache=True)
sns.relplot(x="total_bill", y="tip", data=tips);

散点图

绘制线图

df = pd.DataFrame('a': range(10), 'b': np.random.randn(10))
sns.relplot(x="a", y="b", kind="line", data=df)

线图

seaborn 可以直接读取 pandas DataFrame中的列作为x轴和y轴,一行代码即可完成绘图,使用比 matplotlib 更容易。

1.2 常用参数

relplot()函数中有一些常用的参数,可以帮助我们绘制更复杂的图形。

以上面散点图为例,设置hue参数,可以为不同类别的点绘制不同的颜色。

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

hue参数

smokertips中的一列,取值为YesNo,上面散点图中smoker=Yes时点是蓝色,smoker=No时,点是橙色。

设置col参数,可以将数据绘制不同的散点图中

sns.relplot(x="total_bill", y="tip", col="smoker", data=tips);

col参数

smoker=Yes的数据都绘制在第1行第1列的散点图中;smoker=No的数据都绘制在第1行第2列的散点图中。

设置style参数,可以为不同类别的点绘制不同的形状。

sns.relplot(x="total_bill", y="tip", style="smoker", data=tips);

style参数

smoker=Yes的是圆点smoker=No星号

下图列举了replot的其他的参数,使用方式与上面类似,这里就不再赘述了。

参数

这些参数对线图也同样适用,并且参数之间可以任意组合。

1.3 特殊的线图

上面绘制的线图,横坐标x取值是唯一的,但实际中有些数据横坐标取值不唯一,用relplot()绘制出来是下面的效果。

fmri = sns.load_dataset("fmri", data_home='seaborn-data', cache=True)
sns.relplot(x="timepoint", y="signal", kind="line", data=fmri);

横坐标聚合的线图

蓝色实线是x的平均值,周围的阴影是平均值的 95% 置信区间

周围阴影可以通过ci参数设置,如:ci='sd'表示绘制标准差,而不是置信区间。

sns.relplot(x="timepoint", y="signal", kind="line", ci='sd', data=fmri);

ci参数

ci=None可以不显示阴影。

设置estimator=None参数可以关闭聚合

sns.relplot(x="timepoint", y="signal", estimator=None, kind="line", data=fmri);

estimator

2. 数据分布图

seaborn 提供 histplot()kdeplot()ecdfplot()rugplot()函数,分别绘制直方图核密度估计图经验累积分布图垂直刻度

分布图的通用函数是displot(),通过指定kind来绘制不同的图:

  • kind="hist"(默认)等价于histplot()

  • kind="kde"等价于kdeplot()

  • kind="ecdf"等价于ecdfplot()

由于rugplot()只是用来标识刻度,它不需要kind指定,而是通过rug=Truerug=False(默认)来指定是否需要显示在图形中。

2.1 直方图

直方图是比较常见的数据分布图,它的绘制也很简单。

sns.displot(penguins, x="flipper_length_mm")

直方图

seaborn 提供了binwidthbins等参数设置直方图 bin 的宽度和数量,从而绘制不同形状的直方图

这里也可以设置hue参数,用不同颜色在一张图里绘制不同类别的直方图。当在一张图里绘制多个直方图时,需要设置elementmultiple参数来指定多个直方图的组合方式。

如:multiple="stack"代表堆叠显示。

sns.displot(penguins, x="flipper_length_mm", hue="species", multiple="stack")

multiple=“stack”

设置stat参数可以归一化直方图。如:设置stat="probability"可以使条形高度的和为1。

sns.displot(penguins, x="flipper_length_mm", hue="species", stat="probability")

stat=“probability”

以下是直方图常见的参数及取值

参数

2.2 核密度估计图

直方图的目的是通过分箱和计数观察来近似生成数据的潜在概率密度函数。核密度估计 (KDE) 是为这一问题提供了不同的解决方案。

sns.displot(penguins, x="flipper_length_mm", kind="kde")

核密度估计图

seaborn 从0.11.0版本开始只支持高斯核函数。

设置bw_adjust参数可以让 KDE 图更平滑。

sns.displot(penguins, x="flipper_length_mm", kind="kde", bw_adjust=2)

bw_adjust=2

设置kde=True而不是kind="kde",可以同时绘制直方图KDE 图。

sns.displot(penguins, x="flipper_length_mm", kde=True)

kde=True

2.3 经验累积分布图

经验累积分布函数(ECDF) 通过每个数据点绘制了一条单调递增的曲线,使得曲线的高度反映了具有较小值的观测值的比例。

sns.displot(penguins, x="flipper_length_mm", hue="species", kind="ecdf")

ECDF图

2.4 二元分布图

之前绘制的都是单变量分布图,seaborn 也可以绘制两个变量的分布图。

sns.displot(penguins, x="bill_length_mm", y="bill_depth_mm")

二元分布图

用平面图来展示二元直方图只能通过每个方块的颜色深浅定性观察数据的多少。

同样的,也可以绘制二元核密度估计图,画出来的图形是等高线

sns.displot(penguins, x="bill_length_mm", y="bill_depth_mm", kind="kde")

二元核密度估计图

设置fill=True,可以通过颜色定性观察面的高度。

seaborn 还提供了 jointplot() 函数为二元变量同时绘制不同图形。

sns.jointplot(data=penguins, x="bill_length_mm", y="bill_depth_mm")

jointplot 直方图

jointplot()默认绘制两变量散点图和单变量直方图。

设置kind=kde来绘制 KDE 图。

sns.jointplot(
    data=penguins,
    x="bill_length_mm", y="bill_depth_mm", hue="species",
    kind="kde"
)

jointplot KDE图

seanborn 还提供了pairplot()函数,为更多变量绘图。

sns.pairplot(penguins)

pairplot

默认绘图仍然是直方图和散点图。同样可以设置kind=kde绘制多变量 KDE 图。

3. 分类图

之前我们绘制的关系图都是数值变量,当数据中有类别数据(离散值)时,就需要用分类图来绘制。

seaborn 提供 catplot() 函数来绘制分类图,有以下3种类别

  • 分类散点图

  • kind="strip"(默认) 等价于 stripplot()

  • kind="swarm" 等价于 swarmplot()

  • 分类分布图

  • kind="box" 等价于 boxplot()

  • kind="violin" 等价于 violinplot()

  • kind="boxen" 等价于 boxenplot()

  • 分类估计图

  • kind="point" 等价于 pointplot()

  • kind="bar" 等价于 barplot()

  • kind="count" 等价于 countplot()

3.1 分类散点图

catplot()默认使用stripplot()绘图,它会用少量随机"抖动"调整分类轴上的点位置,避免所有的点都重叠在一起。

tips = sns.load_dataset("tips", data_home='seaborn-data', cache=True)
sns.catplot(x="day", y="total_bill", data=tips)

stripplot

设置jitter参数可以控制抖动的幅度,当jitter=False时,代表不抖动,绘制出的图形跟使用关系散点图是一样的。

sns.catplot(x="day", y="total_bill", jitter=False, data=tips)

等价于

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

jitter=False

可以看到,图上的xy坐标相同的数据重合在一起,非常不方便观察。

虽然jitter可以设置“抖动”,但也有可能造成数据重叠。而kind="swarm"可以绘制非重叠的分类散点图。

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

kind=“swarm”

3.2 分类分布图

kind="box" 可以绘制箱线图。

sns.catplot(x="day", y="total_bill", kind="box", data=tips)

kind=“box”

kind="boxen" 可以绘制增强箱线图。

diamonds = sns.load_dataset("diamonds", data_home='seaborn-data', cache=True)
sns.catplot(x="color", y="price", kind="boxen", data=diamonds.sort_values("color"))

kind=“boxen”

kind="violin" 可以绘制小提琴图。

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

kind=“violin”

3.3 分类估计图

kind="bar" 以矩形条的方式展示数据点估值(默认取平均值)和置信区间,该置信区间使用误差线绘制。

titanic = sns.load_dataset("titanic", data_home='seaborn-data', cache=True)
sns.catplot(x="sex", y="survived", hue="class", kind="bar", data=titanic)

kind=“bar”

矩形条的高度是survived列均值,上面的那根天线就是误差线。

kind="count" 是常见的柱状图,统计x坐标对应的数据量。

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

kind=“count”

kind="point" 绘制点图,展示数据点的估计值(默认平均值)和置信区间,并连接来自同一hue类别的点。

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

kind=“point”

4. 回归图

seaborn 提供线性回归函数对数据拟合,包括regplot()lmplot(),它俩大部分功能是一样的,只是输入的数据和输出图形稍有不同。

lmplot()函数可以绘制两个变量x、y的散点图,拟合回归模型并绘制回归线和该回归的 95% 置信区间。

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

lmplot

设置order参数可以拟合多项式回归模型

anscombe = sns.load_dataset("anscombe", data_home='seaborn-data', cache=True)
sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'II'"), order=2);

order=2

设置logistic=True参数可以拟合逻辑回归模型

sns.lmplot(x="total_bill", y="big_tip", data=tips, logistic=True, y_jitter=.03);

logistic=True

5. 多图网格

seaborn 提供了FacetGrid类可以同时绘制多图。

g = sns.FacetGrid(tips, row="sex", col="smoker")
g.map(sns.scatterplot, "total_bill", "tip")

FacetGrid

实际上它等价于下面这段代码

sns.relplot(x='total_bill', y='tip', row="sex", col="smoker", data=tips)

当然用FaceGrid的好处是可以像 matplotlib 那样设置很多图形属性。

g = sns.FacetGrid(tips, row="sex", col="smoker")
g.map(sns.scatterplot, "total_bill", "tip")
g.set_axis_labels("Total bill", "Tip")
g.set(xticks=[10, 30, 50], yticks=[2, 6, 10])
g.figure.subplots_adjust(wspace=.02, hspace=.02)

另外,seaborn 还提供了PairGrid,可以为多变量同时绘图,且图形种类可以不同。

iris = sns.load_dataset("iris", data_home='seaborn-data', cache=True)
g = sns.PairGrid(iris)
g.map_upper(sns.scatterplot)
g.map_lower(sns.kdeplot)
g.map_diag(sns.kdeplot, lw=3, legend=False)

PairGrid

上图中,对角线以及对角线下方是 KDE 图,对角线上方是散点图。

6. 样式和调色板

这部分主要是对图表外观的设置,感兴趣的朋友可以自行尝试。


技术交流

欢迎转载、收藏、有所收获点赞支持一下!

目前开通了技术交流群,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友

  • 方式①、发送如下图片至微信,长按识别,后台回复:加群;
  • 方式②、添加微信号:dkl88191,备注:来自CSDN
  • 方式③、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

大数据可视化中numpy库都有哪些作用?

...因素、双因素、线性回归、数据矩阵、统计时间序列等的可视化,以让我们来进一步构建复杂的可视化。非常感谢您的耐心观看,如有帮助请采纳,祝生活愉快!谢谢!参考技术A您好,你的问题,我之前好像也遇到过,以下是... 查看详情

数据可视化之seaborn热力图参数详解(很多例子)(代码片段)

defheatmap(data,vmin=None,vmax=None,cmap=None,center=None,robust=False,annot=None,fmt=".2g",annot_kws=None,linewidths=0,linecolor="white",cbar&# 查看详情

数据可视化之seaborn热力图参数详解(很多例子)(代码片段)

defheatmap(data,vmin=None,vmax=None,cmap=None,center=None,robust=False,annot=None,fmt=".2g",annot_kws=None,linewidths=0,linecolor="white",cbar&# 查看详情

数据可视化专题——seaborn简介

Seaborn是一个用Python制作统计图形的库。它建立在matplotlib之上,并与pandas数据结构紧密集成。Seaborn可帮助您探索和理解您的数据。它的绘图功能对包含整个数据集的数据框和数组进行操作,并在内部执行必要的语义映射和统计... 查看详情

python数据可视化:数据分布统计图和热图

...。在Matplotlib中,可以通过绘制直方图将数据的分布情况可视化。在Seaborn中,也提供了绘制直方图的函数。输出结果:sns.distplot函数即实现了直方图,还顺带把曲线画出来了——曲线其实代表了KDE。除了sns.distplot之外,在Seaborn中... 查看详情

seaborn笔记:可视化统计关系(散点图折线图)(代码片段)

 0 导入库importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltimportseabornassnssns.set_theme(style="darkgrid")1散点图演示数据集tips=sns.load_dataset("tips")#导入一个数据集  1.0基础用法以下两种方式几 查看详情

09seaborn数据可视化基础入门

...据子集相互比较。对独立变量和相关变量进行回归拟合和可视化更加便捷。对数据矩阵进行可视化,并使用聚类算法进行分析。基于时间序列的绘制和统计功能,更加灵活的不确定度估计。基于网格绘制出更加复杂的图像集合。... 查看详情

pandas数据探索分析,分享两个神器

...sweetviz,同样是一个开源Python库,可生成美观、高密度的可视化,只需两行代码即可启动EDA。该插件围绕快速可视化目标值和比较数据集而构建。它的目标是帮助快速分析目标特征、训练与测试数据以及其他此类数据特征任务。... 查看详情

python数据科学中的seaborn绘图可视化(代码片段)

本篇文章主要研究Seaborn库——Seaborn是一个统计绘图库,建立在Matplotlib基础之上。它具有非常漂亮的默认绘图样式,并且也与PandasDataFrames配合得很好。Seaborn可以像安装任何其他Python包一样使用“pip”进行安装。pipinstallse... 查看详情

seaborn库中柱状图绘制详解

...此打算先介绍一下误差线方面的内容,然后介绍一下利用seaborn库绘制柱状图。1.误差线的理解    误差线源于统计学,表示数据误差(或不确定性)范围,以更准确的方式呈现数据。当label上有一组采样 查看详情

springboot接口快速开发神器(接口可视化界面实现)(代码片段)

简介magic-api是一个基于Java的接口快速开发框架,编写接口将通过magic-api提供的UI界面完成,自动映射为HTTP接口,无需定义Controller、Service、Dao、Mapper、XML、VO等Java对象即可完成常见的HTTPAPI接口开发特性支持MySQL、MariaD... 查看详情

springboot接口快速开发神器(接口可视化界面实现)(代码片段)

点击关注公众号,实用技术文章及时了解简介magic-api是一个基于Java的接口快速开发框架,编写接口将通过magic-api提供的UI界面完成,自动映射为HTTP接口,无需定义Controller、Service、Dao、Mapper、XML、VO等Java对象即可... 查看详情

python绘图与可视化seaborn

Seaborn是一个基于matplotlib的Python数据可视化库。它提供了一个高级界面,用于绘制有吸引力且信息丰富的统计图形。 主页:http://seaborn.pydata.org/官方教程:http://seaborn.pydata.org/tutorial.html#tutorial功能介绍:http://seaborn.pydata.org/int... 查看详情

seaborn数据可视化(二)带有类别属性的数据可视化(代码片段)

   Seaborn的分类图分为三类,将分类变量每个级别的每个观察结果显示出来,显示每个观察分布的抽象表示,以及应用统计估计显示的权重趋势和置信区间:第一个包括函数swarmplot()和stripplot()第二个包括函数boxplot()和v... 查看详情

推荐一款python数据可视化神器

...隐藏的规律,察觉到变量之间的互动关系,人们常常借助可视化帮助我们更好的给他人解释现象,做到一图胜千文的说明效果。在Python中,常见的数据可视化库有:matplotlib是最常见的2维库,可以算作可视化的必备技能库,由于mat... 查看详情

推荐一款python数据可视化神器

...隐藏的规律,察觉到变量之间的互动关系,人们常常借助可视化帮助我们更好的给他人解释现象,做到一图胜千文的说明效果。在Python中,常见的数据可视化库有:matplotlib是最常见的2维库,可以算作可视化的必备技能库,由于mat... 查看详情

python绘图之seaborn(代码片段)

最近在系统梳理一下Python的几个可视化绘图库,其中seaborn上手较为方便快捷,下面给大家简单介绍一下,可以满足自己日常需要的绘图要求。Seaborn是一个基于matplotlib且数据结构与pandas统一的统计图制作库。Seaborn框... 查看详情

不写代码轻松实现数据可视化,这款基于springboot的神器,简直绝了(代码片段)

...essIntelligence)工具?BI工具简单来说就是一种数据可视化工具。今天给大家推荐一款开源的数据可视化工具DataEase,基于SpringBoot实现,集成ApacheDoris+Kettle,可支持超大数据量秒级查询,希望对大家有所帮... 查看详情