Python绘图工具seaborn,教会你如何绘制更加精美的图形(二)

文章目录

  • 用分类数据绘图
    • 1 类别散点图
    • 2 类别内的数据分布
      • 2.1 绘制箱形图
      • 2.2 绘制提琴图
    • 3 类别内的统计估计
      • 3.1 绘制条形图
      • 3.2 绘制点图

Hello,大家好,我是景天,今天我们探讨下seaborn根据分类数据类绘图的方法

用分类数据绘图

数据集中的数据类型有很多种,除了连续的特征变量之外,最常见的就是类别型的数据了,比如人的性别、学历、爱好等,这些数据类型都不能用连续的变量来表示,而是用分类的数据来表示。

Seaborn针对分类数据提供了专门的可视化函数,这些函数大致可以分为如下三种:

  • 分类数据散点图: swarmplot()与 stripplot()。
  • 类数据的分布图: boxplot() 与 violinplot()。
  • 分类数据的统计估算图:barplot() 与 pointplot()。

下面两节将针对分类数据可绘制的图形进行简单介绍,具体内容如下

1 类别散点图

通过 stripplot()函数可以画一个散点图, stripplot0函数的语法格式如下。
seaborn.stripplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, jitter=False)
在这里插入图片描述

参数解析:
x,y,hue:数据字段变量名,用于绘制长格式数据的输入
作用:根据实际数据,x,y常用来指定x,y轴的分类名称,
hue常用来指定第二次分类的数据类别(用颜色区分)

什么是长数据?
长数据一般是指数据集中的变量没有做明确的细分。即变量中至少有一个变量中的元素存在值严重重复循环的情况 (可以归为几类),如下表的北京市就重复了。表格整体的形状为长方形。即变量少而观察值多
一列包含了所有的变量,而另一列则是与之相关的值
在这里插入图片描述

什么是宽数据?
宽数据是指数据集对所有的变量进行了明确的细分,各变量的值不存在重复环的情况也无法归类。数据总体的表现为 变量多而观察值少
每一列为一个变量,每一行为变量所对应的值
在这里插入图片描述

data: DataFrame,数组或数组列表

order,hue_order:字符串列表
作用:显式指定分类顺序,eg. order=[字段变量名1,字段变量名2,…]

jitter : float类型,True/1
作用:当数据重合较多时,用该参数做一些调整,也可以设置间距
如,jitter = 0.1 (通俗讲,就是让数据分散开)

dodge:bool
作用:若设置为True则沿着分类轴,将数据分离出来成为不同色调级别的条带,
否则,每个级别的点将相互叠加

orient:方向:v或者h
作用:设置图的绘制方向(垂直或水平),
如何选择:一般是根据输入变量的数据类型(dtype)推断出来。

color:matplotlib 颜色

palette:调色板名称,list类别或者字典
作用:用于对数据不同分类进行颜色区别

size:float
作用:设置标记大小(标记直径,以磅为单位)

edgecolor:matplotlib color,gray
作用:设置每个点的周围线条颜色

linewidth:float
作用:设置构图元素的线宽度

为了让大家更好地理解,接下来,通过 stripplot()函数绘制一个散点图,示例代码如下。
#获取tips数据
tips = sns.load_dataset(“tips”)

sns.stripplot(x=“day”, y=“total_bill”, data=tips)
先看下数据
在这里插入图片描述

绘图:
在这里插入图片描述

加上hue,根据不同数据用不同颜色区分
sns.stripplot(x=“day”, y=“total_bill”, data=tips,hue=‘time’)
在这里插入图片描述

从上图中可以看出,图表中的横坐标是分类的数据,而且一些数据点会互相重叠,不易于观察。
为了解决这个问题,可以在调用striplot()函数时传入jitter参数,以调整横坐标的位置,改后的示例代码如下。
sns.stripplot(x=“day”, y=“total_bill”, data=tips, jitter=True)
#jitter=True,能够实现部分相同样本不重叠的散点图
在这里插入图片描述

除此之外,还可调用 swarmplot函数绘制散点图,该函数的好处是所有的数据点都不会重叠,可以很清晰地观察到数据的分布情况,示例代码如下。
sns.swarmplot(x=“day”, y=“total_bill”, data=tips)
在这里插入图片描述

2 类别内的数据分布

要想查看各个分类中的数据分布,显而易见,散点图是不满足需求的,原因是它不够直观。针对这种情况,我们可以绘制如下两种图形进行查看:

  • 箱形图:
    • 箱形图(Box-plot)又称为盒须图、盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图。因形状如箱子而得名。
    • 箱形图于1977年由美国著名统计学家约翰·图基(John Tukey)发明。它能显示出一组数据的最大值、最小值、中位数、及上下四分位数。
      在这里插入图片描述

超出上下极限的单点为异常值

小提琴图:

  • 小提琴图 (Violin Plot) 用于显示数据分布及其概率密度。
  • 这种图表结合了箱形图和密度图的特征,主要用来显示数据的分布形状。
  • 中间的黑色粗条表示四分位数范围,从其延伸的幼细黑线代表 95% 置信区间,而白点则为中位数。
  • **箱形图在数据显示方面受到限制,简单的设计往往隐藏了有关数据分布的重要细节。**例如使用箱形图时,我们不能了解数据分布。虽然小提琴图可以显示更多详情,但它们也可能包含较多干扰信息。

在这里插入图片描述
置信区间解释:
按照95%置信区间构造出来的区间,如果我构造出100个这样的区间,其中大约有95个会包含μ。
这就好像用渔网捞鱼,我知道一百次网下去,可能会有95次网到我想要的鱼,但是我并不知道是不是现在这一网。

2.1 绘制箱形图

seaborn中用于绘制箱形图的函数为 boxplot(),其语法格式如下:
seaborn.boxplot(x=None, y=None, hue=None, data=None, orient=None, color=None, saturation=0.75, width=0.8)
在这里插入图片描述

参数详解:
x, y, hue:数据或向量数据中的变量名称
用于绘制长格式数据的输入。

data:DataFrame,数组,数组列表
用于绘图的数据集。如果x和y都缺失,那么数据将被视为宽格式。否则数据被视为长格式。

order, hue_order:字符串列表
控制分类变量(对应的条形图)的绘制顺序,若缺失则从数据中推断分类变量的顺序。

orient:“v”或“h”
控制绘图的方向(垂直或水平)。这通常是从输入变量的 dtype 推断出来的,但是当“分类”变量为数值型或绘制宽格式数据时可用于指定绘图的方向。

color:matplotlib颜色
所有元素的颜色,或渐变调色板的种子颜色。

palette:调色板名称,列表或字典
用于hue变量的不同级别的颜色。可以从color_palette()得到一些解释,或者将色调级别映射到matplotlib颜色的字典,---- palette=[“r”,“g”,“b”,“y”]。

saturation:float
控制用于绘制颜色的原始饱和度的比例。通常大幅填充在轻微不饱和的颜色下看起来更好,如果您希望绘图颜色与输入颜色规格完美匹配可将其设置为1。

width:float
不使用色调嵌套时完整元素的宽度,或主要分组变量一个级别的所有元素的宽度。

dodge:bool
使用色调嵌套时,元素是否应沿分类轴移动。

fliersize:float
用于表示异常值观察的标记的大小。

linewidth:float
构图元素的灰线宽度。

whis:float
控制在超过高低四分位数时 IQR (四分位间距)的比例,因此需要延长绘制的触须线段。超出此范围的点将被识别为异常值。

notch:boolean
是否使矩形框“凹陷”以指示中位数的置信区间。还可以通过plt.boxplot的一些参数来控制

ax:matplotlib轴
绘图时使用的 Axes 轴对象,否则使用当前 Axes 轴对象

kwargs:键值映射
其他在绘图时传给plt.boxplot的参数

使用 boxplot()函数绘制箱形图的具体示例如下。
sns.boxplot(x=“day”, y=“total_bill”, data=tips)
先看下原始数据
在这里插入图片描述

看下绘制的图
在这里插入图片描述

上述示例中,使用 seaborn中内置的数据集tips绘制了一个箱形图,图中x轴的名称为day,其刻度范围是 Thur~Sun(周四至周日),y轴的名称为 total_bill,刻度范围为10-50左右

从图中可以看出:

  • Thur列大部分数据都小于30,不过有5个大于30的异常值,
  • Fri列中大部分数据都小于30,只有一个异常值大于40,
  • Sat一列中有3个大于40的异常值,
  • Sun列中有2个大于40的异常值

2.2 绘制提琴图

seaborn中用于绘制提琴图的函数为violinplot(),其语法格式如下
seaborn.violinplot(x=None, y=None, hue=None, data=None)
在这里插入图片描述

参数解析:
data:指定绘制小提琴图的数据集。
x:指定小提琴图的x轴数据。
y:指定小提琴图的y轴数据。
hue:指定一个分组变量。
order:传递一个字符串列表,用于分类变量的排序。
hue_order:传递一个字符串列表,用于分类变量hue值的排序。
bw:指定核密度估计的带宽,带宽越大,密度曲线越光滑。新版的即将废除,使用bw_method和bw_adjust
scale:用于调整小提琴图左右的宽度,如果为area,则表示每个小提琴图左右部分拥有相同的面积;如果为count,则表示根据样本数量来调节宽度;如果为width,则表示每个小提琴图左右两部分拥有相同的宽度。
scale_hue:bool类型参数,当使用hue参数时,是否对hue变量的每个水平做标准化处理,默认为True。
width:使用hue参数时,用于控制小提琴图的宽度。
inner:指定小提琴图内部数据点的形态,如果为box,则表示绘制微型的箱线图;如果为quartiles,则表示绘制四分位的分布图;如果为point或stick,则表示绘制点或小竖条。
split:bool类型参数,使用hue参数时,将小提琴图从中间分为两个不同的部分,默认为False。
dodge:bool类型的参数,当使用hue参数时,是否绘制水平交错的小提琴图,默认为True。
orient:指定小提琴图的呈现方向,默认为垂直方向。
linewidth:指定小提琴图的所有线条宽度。
color:指定小提琴图的颜色,该参数与palette参数一起使用时无效。
palette:指定hue变量的区分色。
saturation:指定颜色的透明度。
ax:指定子图的位置。

通过violinplot()函数绘制提琴图的示例代码如下
sns.violinplot(x=“day”, y=“total_bill”, data=tips)
在这里插入图片描述

上述示例中,使用seaborn中内置的数据集绘制了一个提琴图,图中x轴的名称为day,y轴的名称为total_bill

从图中可以看出:

  • Thur一列中位于5~25之间的数值较多,
  • Fri列中位于5-30之间的较多,
  • Sat-列中位于5-35之间的数值较多,
  • Sun一列中位于5-40之间的数值较多。

3 类别内的统计估计

要想查看每个分类的集中趋势,则可以使用条形图和点图进行展示。 Seaborn库中用于绘制这两种图表的具体函数如下

  • barplot()函数:绘制条形图。
  • pointplot()函数:绘制点图。

这些函数的API与上面那些函数都是一样的,这里只讲解函数的应用,不再过多对函数的语法进行讲解了。

3.1 绘制条形图

最常用的查看集中趋势的图形就是条形图。默认情况下, barplot函数会在整个数据集上使用均值进行估计。
若每个类别中有多个类别时(使用了hue参数),则条形图可以使用引导来计算估计的置信区间(是指由样本统计量所构造的总体参数的估计区间),并使用误差条来表示置信区间。

使用 barplot()函数的示例如下
sns.barplot(x=“day”, y=“total_bill”, data=tips)

在这里插入图片描述

3.2 绘制点图

另外一种用于估计的图形是点图,可以调用 pointplot()函数进行绘制,该函数会用高度低计值对数据进行描述,而不是显示完整的条形,它只会绘制点估计和置信区间

通过 pointplot()函数绘制点图的示例如下。
sns.pointplot(x=“day”, y=“total_bill”, data=tips)

在这里插入图片描述

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

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

相关文章

【前端模板】bootstrap5实现高端手表网页Chrono(适用电商,附带源码)

一、需求分析 高端手表网页是指专门销售高端手表的在线平台或网站。这些网页旨在向消费者展示和销售高级手表品牌的产品。以下是一些常见的功能: 产品展示:高端手表网页提供详细的产品页面,展示不同品牌和型号的高级手表。这些页面通常包括产…

Vim工具使用全攻略:从入门到精通

引言 在软件开发的世界里,Vim不仅仅是一个文本编辑器,它是一个让你的编程效率倍增的神器。然而,对于新手来说,Vim的学习曲线似乎有些陡峭。本文将手把手教你如何从Vim的新手逐渐变为高手,深入理解Vim的操作模式&#…

Python 数据分析(PYDA)第三版(一)

原文:wesmckinney.com/book/ 译者:飞龙 协议:CC BY-NC-SA 4.0 关于开放版本 第 3 版的《Python 数据分析》现在作为“开放获取”HTML 版本在此网站wesmckinney.com/book上提供,除了通常的印刷和电子书格式。该版本最初于 2022 年…

iOS应用提交上架的最新流程

摘要 本篇博客介绍了iOS应用程序上架的最新流程。包括上架基本需求资料、证书的创建和使用、测试设备的添加、描述文件的创建、打包、审核等步骤。 引言 在开发完iOS应用程序后,我们需要将其提交到App Store上架。然而,随着技术的不断发展,…

11.Ubuntu

目录 1. 什么是Ubuntu 1.1. 概述 1.2. Ubuntu版本简介 1.2.1. 桌面版 1.2.2. 服务器版 2. 部署系统 2.1. 新建虚拟机 2.2. 安装系统 2.3. 部署后的设置 2.3.1. 设置root密码 2.3.2. 关闭防火墙 2.3.3. 启用允许root进行ssh 2.3.4. 安装所需软件 2.3.5. 制作快照 …

三种pdf转ppt方法?学会这几招轻松搞定转换

三种pdf转ppt方法?在当今的工作和生活中,PDF和PPT这两种文件格式常常会让我们感到困扰。有时候我们需要将PDF文件转换成PPT格式,以便更好地进行演示或工作汇报。但是,如何快速、准确地完成这项任务呢?本文将为你揭秘三…

引流技术-通过文件中增加联系方式并传播

文章目录 前言文档增加联系方式扩散网盘扩散自建网站借力 注意 前言 很多人在找资料的时候可能都遇到过下图情况: 1、文档最后面留一个自己的联系方式; 2、找的一堆文件中都有相同的情况; 3、一段时间全网搜到的很多相同文件也有这个联系方式…

洞察未来趋势,引领技术革新——2023年全球软件开发大会(QCon上海站)全景解析

在全球科技飞速发展的浪潮中,软件开发行业始终扮演着创新引擎的角色。 作为业界瞩目的年度盛会,2023年全球软件开发大会(QCon上海站)不仅是一场技术交流的嘉年华,更是一次洞察行业趋势、探索未来发展方向的重要平台。…

【Linux】vim的简单使用

我们知道在Windows下的VS2019是一个集成开发环境,也就是说,集编辑,编译,调试等功能都放在了一起;但是在Linux下,这些步骤都是分开的,我们这篇博客就来说一说vim这个编辑器,它只有编辑…

vit细粒度图像分类(十)TransFG学习笔记

1.摘要 细粒度视觉分类(FGVC)是一项非常具有挑战性的任务,它旨在从子类别中识别对象,这是由于类间固有的微妙差异。现有的大部分工作主要是通过重用骨干网络提取检测到的判别区域的特征来解决这一问题。然而,这种策略不可避免地使管道变得复…

搭建k8s集群实战(四)k8s node 资源管理、避免系统无响应

Kubernetes 的节点可以按照 Capacity 调度。默认情况下 pod 能够使用节点全部可用容量。 这是个问题,因为节点自己通常运行了不少驱动 OS 和 Kubernetes 的系统守护进程。 除非为这些系统守护进程留出资源,否则它们将与 pod 争夺资源并导致节点资源短缺问题,从而导致系统无响…

回溯法:回溯法通用模版汇总以及模版应用

从一个问题开始 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。 示例: 输入: n 4, k 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4] ] 很容易想到 用两个for循环就可以解决。 如果n为100,k为50呢,那就50层for循…

Java中动态修改注解的值

1. 描述 部分场景需要动态修改注解的值。例如,我们使用自定义注解控制接口流量,如果需要动态修改流量值,可以使用反射的方法实现。 2. 步骤 获取注解从注解中获取memberValues属性(map)使用put方法更新对象的值 3. 代码实现 该部分代码主…

MySQL事务原理的分析

1.事务 并发连接下考虑事务。 事务的本质是并发控制的单元,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。 事务控制语句 ACID特性 原子性:要么都做,要走么都不做。在事务执…

原型中之find()-查找满足条件的第一个元素,并返回该元素的值

array.find(callback(element[, index[, array]])[, thisArg]) callback:必需。要在数组中每个元素上执行的函数。 element:必需。当前正在处理的数组元素。 index:可选。正在处理的元素的索引。 array:可选。调用该方法的数组…

【Java程序设计】【C00247】基于Springboot的农机电招平台(有论文)

基于Springboot的农机电招平台(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的农机电招平台 本系统分为系统功能模块、管理员功能模块、农机机主功能模块以及使用者功能模块。 系统功能模块:农机电招…

电力升级改造,我发现了这种配电柜高效技巧!

在当今数字化和智能化的时代,电力作为企业和机构运转的生命线,其高效、可靠、安全的管理变得尤为重要。 因此,为了应对不断增长的电力需求和提升电力设备的运行水平,配电柜监控系统应运而生。 客户案例 制造业企业 济宁某企业面…

8868体育助力意甲尤文图斯俱乐部 帮助球队签订新合同

意甲的尤文图斯俱乐部是8868合作体育球队之一,根据意大利媒体的消息,尤文图斯已经决定和费德里科-基耶萨续约,这名球员已经开始思考他的将来了。 费德里科-基耶萨今年26岁,他和尤文图斯的合约到2025年6月30号就结束了。他知道很多…

Jmeter 基于Docker 实现分布式测试

基于Docker 实现分布式测试 制作Jmeter基础镜像制作工作节点镜像启动工作节点启动控制节点遇到的问题 使用Docker 部署Jmeter非常方便,可以省略软件的安装以及配置,比如jdk、jmeter。需要部署多个工作节点可以节省时间。 控制节点(Master-主节…

yo!这里是单例模式相关介绍

目录 前言 特殊类设计 只能在堆上创建对象的类 1.方法一(构造函数下手) 2.方法二(析构函数下手) 只能在栈上创建对象的类 单例模式 饿汉模式实现 懒汉模式实现 后记 前言 在面向找工作学习c的过程中,除了基本…