10分钟掌握seaborn绘制多子图

news2024/11/25 15:55:20

公众号:尤而小屋
作者:Peter
编辑:Peter

大家好,我是Peter~

本文介绍如何使用seaborn绘制多子图

In [1]:

import matplotlib.pyplot as plt 
%matplotlib inline

import seaborn as sns
import plotly_express as px

import warnings
warnings.filterwarnings("ignore")

导入数据

In [2]:

# 内置的tips数据 基于seaborn导入方法
# tips = sns.load_dataset("tips")

In [3]:

# 基于plotly_express
tips = px.data.tips()
tips.head(3)

Out[3]:

total_billtipsexsmokerdaytimesize
016.991.01FemaleNoSunDinner2
110.341.66MaleNoSunDinner3
221.013.50MaleNoSunDinner3

In [4]:

gdp = px.data.gapminder()
gdp.head(3)

Out[4]:

countrycontinentyearlifeExppopgdpPercapiso_alphaiso_num
0AfghanistanAsia195228.8018425333779.445314AFG4
1AfghanistanAsia195730.3329240934820.853030AFG4
2AfghanistanAsia196231.99710267083853.100710AFG4

In [5]:

iris = px.data.iris()
iris.head(3)

Out[5]:

sepal_lengthsepal_widthpetal_lengthpetal_widthspeciesspecies_id
05.13.51.40.2setosa1
14.93.01.40.2setosa1
24.73.21.30.2setosa1

基于FacetGrid

Seaborn中的FacetGrid是一个多维数据图形接口,通过使用它,我们可以方便地创建基于不同的分面变量的多个图形。

FacetGrid可以通过col和row等参数来一次性构建多个图形,例如使用relplot、catplot、lmplot等函数在一个Figure中绘制多个图。

这个函数之所以有这些功能,是因为函数底层使用了FacetGrid来组装这些图形。

FacetGrid绘图的x和y参数必须为DataFrame的列的名字。

In [6]:

g = sns.FacetGrid(tips, col="time")

g表示的就是待绘图的画布;而且是基于time字段进行绘制多子图。这样后续我们就可以在对象g上进行绘图。

直方图histplot

In [7]:

g = sns.FacetGrid(tips, col="time")
g.map(sns.histplot, "tip")

散点图scatterplot

In [8]:

g = sns.FacetGrid(tips, col="sex", hue="smoker")  # 1

g.map(sns.scatterplot, "total_bill", "tip", alpha=.8)  # 2
g.add_legend()  # 3

解释下代码:

  • 第一行:col参数表示列方向的分组字段,hue表示颜色的分组
  • 第二行:sns.scatterplot表示绘制散点图,使用total_billtip两个字段绘制,alpha表示散点的透明度
  • 第三行:表示添加图例,右侧的smoker(No-Yes);否则不会显示图例legend

回归散点图regplot

In [9]:

g = sns.FacetGrid(tips, 
                  row="smoker",  # 行
                  col="time",  # 列
                  margin_titles=True  # 标题显示:True-表示行列分开,False-合并显示
                 )

g.map(sns.regplot, 
      "size", "total_bill", 
      # color=".2",   # color="red"
      # fit_reg=False, 是否显示拟合的回归线;默认是True
      x_jitter=.1
     )

箱型图barplot

In [10]:

g = sns.FacetGrid(tips, 
                  col="day", # 列元素分组
                  height=4, # 控制高
                  aspect=.6  # 控制宽
                 )

g.map(sns.barplot,
      "sex", "total_bill",  # x-y轴
      order=["Male", "Female"] # 指定横轴sex中的显示顺序
     )

# g.add_legend()

核密度估计图kdeplot

kdeplot是Seaborn库中的一个函数,用于绘制核密度估计图。

核密度估计是一种非参数统计方法,用于估计数据样本的密度函数。它通过使用核函数和权重来计算每个数据点的密度,并将所有密度值组合成一条连续的曲线,从而展示数据样本的分布特征。

In [11]:

 tips.day.value_counts()

Out[11]:

Sat     87
Sun     76
Thur    62
Fri     19
Name: day, dtype: int64

表示按照每天出现的数量降序排列:

In [12]:

ordered_days = tips.day.value_counts().index
ordered_days

Out[12]:

Index(['Sat', 'Sun', 'Thur', 'Fri'], dtype='object')

In [13]:

g = sns.FacetGrid(tips, 
                  row="day", # 行方向
                  row_order=ordered_days,  # 使用上面指定的顺序
                  height=1.5, 
                  aspect=4)

g.map(sns.kdeplot, "total_bill")

多图(个数可控)

如果某个字段的取值存在多种情况,可以使用wrap。如果使用wrap,不能使用row参数。

比如gdp数据中的year字段:

In [14]:

gdp["year"].value_counts()  # 总共12个年份

Out[14]:

1952    142
1957    142
1962    142
1967    142
1972    142
1977    142
1982    142
1987    142
1992    142
1997    142
2002    142
2007    142
Name: year, dtype: int64

In [15]:

gdp.columns

Out[15]:

Index(['country', 'continent', 'year', 'lifeExp', 'pop', 'gdpPercap',
       'iso_alpha', 'iso_num'],
      dtype='object')

In [16]:

g = sns.FacetGrid(gdp, 
                  col="year",  # 列方向
                  col_wrap=4   # 分成4列,所以每行3个图(12个年份)  
                 )

g.map(sns.scatterplot, "lifeExp", "pop")

设置风格style

In [17]:

with sns.axes_style("white"):
    g = sns.FacetGrid(tips, row="sex", col="smoker", margin_titles=True, height=2.5)
    
g.map(sns.scatterplot, "total_bill", "tip", color="#334488")

g.set_axis_labels("Total bill (US Dollars)", "Tip")  # 设置x轴的名称
g.set(xticks=[10, 30, 50], yticks=[2, 6, 10])  # 设置x-y轴的范围

g.figure.subplots_adjust(wspace=0.5,  # 左右子图的宽
                         hspace=.3  # 上下子图的高
                        )

基于PairGrid(散点矩阵图)

针对数值型字段绘图

In [18]:

g = sns.PairGrid(iris.iloc[:,:-1])

g.map(sns.scatterplot)

在tips数据中,存在三个数值型字段:

In [19]:

tips.dtypes

Out[19]:

total_bill    float64
tip           float64
sex            object
smoker         object
day            object
time           object
size            int64
dtype: object

只会针对数据中的数值型字段进行绘图:

In [20]:

g = sns.PairGrid(tips)  

g.map(sns.scatterplot)

对角线绘制不同图形

在对角线和非对角线分别绘制不同的图形:

In [21]:

g = sns.PairGrid(iris)
g.map_diag(sns.histplot)  # 对角线
g.map_offdiag(sns.scatterplot)  # 非对角线

通过hue参数选择不同的分组:

In [22]:

g = sns.PairGrid(iris,hue="species")

g.map_diag(sns.histplot)  # 对角线
g.map_offdiag(sns.scatterplot)  # 非对角线

选择部分的字段绘图:通过vars参数指定

In [23]:

g = sns.PairGrid(iris, vars=["sepal_length", "sepal_width"], hue="species")

g.map(sns.scatterplot)

g.add_legend()

上三角、下三角和对角线分别绘制不同类型的图:

In [24]:

g = sns.PairGrid(iris)

g.map_upper(sns.scatterplot)  # 上三角
g.map_lower(sns.kdeplot)  # 下三角
g.map_diag(sns.kdeplot, lw=3, legend=False) # 对角线

行列使用不同变量绘图(非正方形)

In [25]:

g = sns.PairGrid(tips, 
                 x_vars=["total_bill", "size"],  # 同一个y对应两个x的值
                 y_vars=["tip"],                
                 height=4)

g.map(sns.regplot, color="0.2")
g.set(ylim=(-1, 11), yticks=[0, 5, 10])

同样地,可以使用hue参数:

In [26]:

g = sns.PairGrid(tips, hue="size", palette="GnBu_d")

# g.map(plt.scatter, s=50, edgecolor="white")  # 等效如下
g.map(sns.scatterplot, s=50, edgecolor="white")  
g.add_legend()

基于pariplot绘图

在Seaborn中,sns.pairplot()函数可以用于绘制数据的配对图。配对图是一种可视化方法,用于显示两个变量之间的相关性和依赖关系。sns.pairplot()函数可以同时绘制多个变量,并在图上显示它们之间的所有配对关系。

基于hue分组绘图

In [27]:

sns.pairplot(iris, hue="species", height=2.5)

指定对角线绘图类型diag_kind

In [28]:

g = sns.pairplot(iris,  # 数据
                 hue="species", # 分组 
                 palette="Paired",  # 调色板  Set2  Paired  colorblind deep  muted  bright
                 diag_kind="kde",  # 对角线绘图类型
                 height=2.5  # 高度
                )

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/819681.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ELK高级搜索(一)

文章目录 ELK搜索1.简介1.1 内容1.2 面向 2.Elastic Stack2.1 简介2.2 特色2.3 组件介绍 3.Elasticsearch3.1 搜索是什么3.2 数据库搜索3.3 全文检索3.4 倒排索引3.5 Lucene3.6 Elasticsearch3.6.1 Elasticsearch的功能3.6.2 Elasticsearch使…

详解AMQP协议以及JAVA体系中的AMQP

目录 1.概述 1.1.简介 1.2.抽象模型 2.spring中的amqp 2.1.spring amqp 2.2.spring boot amqp 1.概述 1.1.简介 AMQP,Advanced Message Queuing Protocol,高级消息队列协议。 百度百科上的介绍: 一个提供统一消息服务的应用层标准高…

Vector - CAPL - 诊断模块函数(设置和获取)

目录 CanTpGetRxIdentifier CanTpGetTxIdentifier CanTpSetRxIdentifier CanTpSetTxIdentifier 代码示例 CanTpGetPadding & CanTpSetPadding 代码示例 CanTpGetAcceptOtherMode & CanTpSetAcceptOtherMode 代码示例 对于使用OSEK.dll文件调用发送诊断数据和接…

电子技术的发展

本资料仅用于学习和讨论如有侵权请反馈 1.1 第一台只能存储640M 什么是模拟信号: 2.1 把声波转化为电信号 2.2 微音器输出的某一段信号的波形 3、最简单有个蜂鸣器,再好一点有个喇叭 4、人说话的声音是个很复杂的声音 5、嵌入式实时操作系统: 6、结构到函数 6.1 学习环境…

【Java】快速入门JVM

文章目录 1. JVM简介2. 类加载简介3. 类加载的过程4. 双亲委派5. GC垃圾回收6. JVM的回收方式7. 分代回收 1. JVM简介 JVM(Java虚拟机)是一个名字为Java的进程,是用于执行Java程序的虚拟机。 JVM会从操作系统中申请一大块内存空间,又把这个内存空间划分…

我的会议(我的审批,会议签字附源码)

目录 前言: 3.我的审批: 3.1实现的特色功能: 3.2显示的效果 3.3思路: 3.4寻找相关的案例或者自己使用JavaScript去写一个类似的功能 3.5具体的步骤: 3.5.1添加静态的jsp代码(我的审批数据的显示&…

投稿注意!APA格式超全示例详解,原本28天能录用,可能要拖延2个月

为什么同一本期刊有论文28天录用,有论文10个月才录用?结合近期征稿的这本经管类SSCI期刊,小编(Unionpub学术)整理了部分影响录用的几个因素,准备提交此期刊的作者可自查参考下: (参…

【100天精通python】Day20:文件及目录操作_os模块和os.psth模块, 文件路径拼接,目录操作

目录 专栏导读 1 文件的目录操作 os模块的一些操作目录函数​编辑 os.path 模块的操作目录函数 2 相对路径和绝对路径 3 路径拼接 4 判断目录是否存在 5 创建目录、删除目录、遍历目录 专栏导读 专栏订阅地址:https://blog.csdn.net/qq_35831906/category_12…

Segment Anything Model (SAM)

论文地址:https://arxiv.org/pdf/2304.02643.pdf 项目地址:Segment Anything | Meta AI (segment-anything.com) SAM贡献: 1.SA任务:提出了提示图像分割任务,在给定任何图像分割提示的情况下返回一个有效的分割掩码…

JS/node:Blob、ArrayBuffer和Buffer

前端较少涉及对二进制数据的处理,但即便如此,我们偶尔总能在角落里看见它们的身影,今天我们就来聊一聊JS的二进制家族:Blob、ArrayBuffer和Buffer(Buffer由Node.js提供) 概述 Blob: 前端的一个专门用于支…

el-checkbox设置溢出...隐藏后,选框和文字垂直方向不居中了

解决方式设置vertical-align:middle样式属性 ::v-deep .el-checkbox__label {font-size: 18px;margin-bottom: 5px;width: 100%;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;vertical-align: middle;//可以实现复选框和文字垂直方向居中}

2023.8.1号论文阅读

文章目录 MCPA: Multi-scale Cross Perceptron Attention Network for 2D Medical Image Segmentation摘要本文方法实验结果 SwinMM: Masked Multi-view with SwinTransformers for 3D Medical Image Segmentation摘要本文方法实验结果 MCPA: Multi-scale Cross Perceptron Att…

Redis 高可用:主从复制、哨兵模式、集群模式

文章目录 一、redis高可用性概述二、主从复制2.1 主从复制2.2 数据同步的方式2.2.1 全量数据同步2.2.2 增量数据同步 2.3 实现原理2.3.1 服务器 RUN ID2.3.2 复制偏移量 offset2.3.3 环形缓冲区 三、哨兵模式3.1 原理3.2 配置3.3 流程3.4 使用3.5 缺点 四、cluster集群4.1 原理…

芯片制造详解.薄膜沉积.学习笔记(六)

这里附上原视频链接,此文章是对于视频的归纳和整理。 如何造出芯片:薄膜沉积|芯片制造详解06 芯片制造详解.薄膜沉积.学习笔记 六 一、由薄膜引出沉积二、沉积的分类2.1 物理沉积(PVD)2.2 化学气相沉积(CVD) 三、沉积的历史3.1 V1.0 常压化学…

无涯教程-Lua - 简介

Lua是一种轻量语言,它的官方版本只包括一个精简的核心和最基本的库。这使得Lua体积小、启动速度快。它用ANSI C语言编写并以源代码形式开放,编译后仅仅一百余K,可以很方便的嵌入别的程序里。和许多“大而全”的语言不一样,网络通信…

STM32基础知识学习笔记汇总

笔记后面补充汇集到此 怎么选 初学:海创、杨桃杜洋、江科大、千峰进阶:安福莱、普中过度:韦东山深入:正点、野火其他:金沙滩、自化协、硬石 扩展 库函数操作相当于C,面向对象寄存器操作相当于C &#xff…

【HarmonyOS】键盘遮挡输入框时,实现输入框显示在键盘上方

【关键字】 harmonyOS、键盘遮挡input,键盘高度监听 【写在前面】 在使用API6、API7开发HarmonyOS应用时,常出现页面中需要输入input,但是若input位置在页面下方,在input获取焦点的时候,会出现软键盘挡住input情况&a…

【备战csp-j】 csp常考题型详解(2)

二.计算机网络。 1. TCP/IP 协议共有( )层协议 。 A.3 B.4 C.5 D.6 答案:B 解析: 2.Ipv4 地址是由( ) 位二进制数码表示的。 A.16 B.32 C.24 D.8 答案:B 解析:IP地址是IP协议提供的一种统一的地址格式。在目前使用的IPv…

使用Python创建快速创建剪映草稿轨道,自动生成视频

使用Python创建快速创建剪映草稿轨道,自动生成视频 一、实现原理 实现原理 : JianYingPro 项目文件是 json 的形式存储的,只需要创建draft_content.json,draft_mate_info.json 打开软件后会自动补全。 作用:快速生成草稿,可以完…

jenkins通过sshPut传输文件的时候,报错Permission denied的SftpException

一、背景 使用jenkins的ssh插件传输文件至远程机器的指定目录,php程序打包后,经过zip压缩为oms.zip zip -rq oms.zip ./ -x .git/* -x .env然后我们求md5值 md5sum oms.zip最后执行传输。 09:03:02 Executing command on ssh[116.61.10.149]: mkdir…