Seaborn : 超好用的Python可视化工具

1. 引言

说到数据可视化,Seaborn就像一颗隐藏的宝石!在进行探索性数据分析时,我们通常从Matplotlib 开始,而对 Seaborn 的探索相对较少!但是,只要你了解 Seaborn 的全部潜力,你就会惊奇地发现,我们可以在数据中探索出更多有趣的东西。

闲话少说,我们直接开始吧!

2. 安装

在深入学习示例之前,让我们先确保Seaborn已安装。如果尚未安装,请使用以下命令:

pip install seaborn

现在我们已经安装了Seaborn,让我们通过一系列高级 Python 代码示例来探索它的用法。

3. 简单直方图

首先,让我们创建一个简单的数据分布直方图:


import seaborn as sns
import matplotlib.pyplot as plt# Load the "tips" dataset
tips = sns.load_dataset("tips")
print(tips.head())
# Count Plot
plt.figure(figsize=(8, 5))
sns.countplot(x="day", data=tips, palette="Set3")
plt.title("Count of Tips by Day of the Week")
plt.show()

运行后得到如下:
在这里插入图片描述

在这里插入图片描述
本示例使用函数countplot创建一个简单的直方图。小费数据集是关于人们在餐厅中给出的小费,首先展示了数据集中的前五行的样例数据,接着进行了直方图的绘制。通过上述直方图,可以观察人们付小费的次数随工作日变化的计数图。

4. 分簇散点图

分簇散点图Swarm Plot 通常在 x 轴上显示分类变量,在y轴上显示数值变量,并沿着每个类别显示单个数据点。现在,正如你所猜测的那样,这可以让我们直观地看到类别内数据点的分布和密度。

我们来看个示例如下:


import seaborn as sns
import matplotlib.pyplot as plt
# Load the "tips" dataset
tips = sns.load_dataset("tips")
# Swarm Plot
plt.figure(figsize=(8, 5))
sns.swarmplot(x="day", y="total_bill", data=tips, palette="viridis")
plt.title("Total Bill Distribution by Day of the Week")
plt.xlabel("Day of the Week")
plt.ylabel("Total Bill ($)")
plt.show()

运行后得到结果如下:
在这里插入图片描述

在本例中,我们使用 swarmplot 创建了一个分簇散点图。通过该图,有助于了解数据点的密度,因为它们能清楚地显示数据点的集中和稀疏位置。

5. 点阵图

点阵图Point Plot通常在 x 轴上显示分类变量,在 y 轴上显示数值变量,可以深入了解每类数据的分布和中心点倾向。

绘制点阵图的示例代码如下:

import seaborn as sns
import matplotlib.pyplot as plt
# Load the "tips" dataset
tips = sns.load_dataset("tips")
# Point Plot
plt.figure(figsize=(8, 5))
sns.pointplot(x="day", y="total_bill", data=tips, ci="sd", palette="pastel")
plt.title("Average Total Bill by Day of the Week")
plt.xlabel("Day of the Week")
plt.ylabel("Average Total Bill ($)")
plt.show()

运行后得到结果如下:
在这里插入图片描述
在上述代码中,这条线或每个点代表每个类别中数值变量的平均值或中值。因此,使用它可以快速直观地查看不同类别的平均值或中值是否存在明星差异。

6. 小提琴图

分类变量通常控制组或类别,而数值变量则用于在每个类别中创建小提琴图。小提琴图中某一点的宽度表示该值所在数据点的密度,小提琴图的中心部分就像一把小提琴,因此被称为小提琴图。通常使用函数 sns.violinplot 绘制小提琴图。

我们不妨来看个示例如下:

import seaborn as sns
import matplotlib.pyplot as plt
# Load the "tips" dataset
tips = sns.load_dataset("tips")
# Categorical Violin Plot
plt.figure(figsize=(8, 5))
sns.violinplot(x="day", y="total_bill", data=tips, palette="Set2")
plt.title("Total Bill Distribution by Day of the Week")
plt.xlabel("Day of the Week")
plt.ylabel("Total Bill ($)")
plt.show()

运行后,得到结果如下:
在这里插入图片描述
小提琴图是比较不同类别数字数据分布的有效工具。通过它,大家不仅可以看到分布的中心倾向和分布范围,还可以看到分布的形状和密度。

7. 二维变量回归图

回归图(Regression Plot)的重点是突出两个数字变量之间的关系:自变量(通常在x轴上)和因变量(在 y 轴上)。单个数据点以点的形式显示,回归图的中心元素是回归线或曲线,它代表了描述变量之间关系的最佳拟合数学模型。

我们来看个示例:

import seaborn as sns
import matplotlib.pyplot as plt
# Load the "tips" dataset
tips = sns.load_dataset("tips")
# Regression Plot
plt.figure(figsize=(8, 5))
sns.regplot(x="total_bill", y="tip", data=tips, scatter_kws={"color": "blue"}, line_kws={"color": "red"})
plt.title("Regression Plot of Total Bill vs. Tip")
plt.xlabel("Total Bill ($)")
plt.ylabel("Tip ($)")
plt.show()

运行后,得到结果如下:
在这里插入图片描述
上图中,绘制的回归线表示根据账单总额预测小费的最佳拟合线性模型。散点表示单个数据点,我们可以观察到这些数据点是如何聚集在回归线周围的。该图有助于了解这两个变量之间的线性关系。

8. 联合分布图

联合分布图(Joint Plot)结合了散点图、直方图和密度图来直观显示两个数值变量之间的关系。散点图是联合图的核心元素,它将两个变量的数据点相对应地显示出来,沿着散点图的x轴和 y 轴,每个变量都有直方图或核密度估计图。这些边际图分别显示每个变量的分布情况。

我们来看个示例:

import seaborn as sns
import matplotlib.pyplot as plt
# Load the "tips" dataset
tips = sns.load_dataset("tips")
# Joint Plot
sns.jointplot(x="total_bill", y="tip", data=tips, kind="scatter")
plt.show()

运行后,得到结果如下:
在这里插入图片描述
我们可以看到,通过散点图显示了两个变量之间的关系,而边际直方图则分别显示了每个变量的分布情况。

9. 六边形图

六边形图(Hexbin plot)是六边形分隔图的简称,它将数据点分组到六边形箱中,使大家能够更有效地直观显示数据密度和模式。当单个点的散点图变得过于拥挤且难以解读时,六边形分隔图对于这类大型数据集尤为重要!

Seaborn中,我们可以自定义颜色图、网格大小和其他绘图参数,以微调六边形绘图的外观。绘制六边形图的示例代码如下:

import seaborn as sns
import matplotlib.pyplot as plt
# Load the "tips" dataset
tips = sns.load_dataset("tips")
# Hexbin Plot
plt.figure(figsize=(8, 5))
sns.jointplot(x="total_bill", y="tip",kind='hex', data=tips, gridsize=15, cmap="Blues")
plt.title("Hexbin Plot of Total Bill vs. Tip")
plt.xlabel("Total Bill ($)")
plt.ylabel("Tip ($)")
plt.show()

运行后得到结果如下:
在这里插入图片描述
在这里,对于大型数据集而言,六边形图比简单的散点图更加清晰。图中的每个六边形都用颜色标注,以表示该分区中数据点的密度。

10. 关系图

通过关系图,大家可以直观地看到两个数值变量之间的关系,以及其他分类或数值维度。一般使用函数sns.relplot()进行绘制,大家可以使用色调参数根据分类变量为数据点着色,使用大小参数根据数值变量改变标记大小,使用样式参数根据分类变量区分标记或线条。

我们来看个例子,如下:

import seaborn as sns
import matplotlib.pyplot as plt
# Load the "tips" dataset
tips = sns.load_dataset("tips")# Create a scatterplot using a Relational Plot (relplot)
sns.relplot(x="total_bill", y="tip", data=tips, hue="time", style="sex", size="size", palette="Set1", height=6)
plt.title("Relational Scatter Plot for Tips Dataset")
plt.xlabel("Total Bill ($)")
plt.ylabel("Tip ($)")
plt.savefig('relplot_with_mv.png')
plt.show()

运行后得到结果如下:
在这里插入图片描述

在本例中,数据集中的time列用于使用色调参数对数据点着色,size列用于使用大小参数改变不同的尺寸,sex列用于不同的标记参数。

11. 面网格图

面网格图是Seaborn的一项功能,它允许大家创建一个子网格,每个子网格代表数据集中的一个不同子集。通过这种方式,面网格图可用于比较不同类别中多个变量之间的关系。

一般来说,使用函数sns.FacetGrid() 来创建面网格图,并返回网格对象。创建网格对象后,我们需要将其映射到我们选择的任何绘图中。

示例代码如下:

import seaborn as sns
import matplotlib.pyplot as plt
# Load the "tips" dataset
tips = sns.load_dataset("tips")
# Create a Facet Grid of histograms for different days
g = sns.FacetGrid(tips, col="day", height=4, aspect=1.2)
g.map(sns.histplot, "total_bill", kde=True)
g.set_axis_labels("Total Bill ($)", "Frequency")
g.set_titles(col_template="{col_name} Day")
plt.savefig('facet_grid_hist_plot.png')
plt.show()

运行后得到结果如下:
在这里插入图片描述

12. 配对图

配对图(Pair Plot)提供了一个由散点图和直方图组成的网格,其中每个图都显示了两个变量之间的关系,因此也被称为配对图或散点图矩阵。

绘制配对图的示例代码如下:

import seaborn as sns
import matplotlib.pyplot as plt
# Load the "iris" dataset
iris = sns.load_dataset("iris")# Pair Plot
sns.set(style="ticks")
sns.pairplot(iris, hue="species", markers=["o", "s", "D"])
plt.show()

运行后得到结果如下:
在这里插入图片描述

在配对图中,对角线单元格通常显示单个变量的直方图或核密度分布图。网格中的非对角线单元格通常显示为散点图,表示两个变量之间的关系。配对图对于了解数据中多个维度的模式、相关性和分布特别有用。

13. 总结

Seaborn是一个通用且功能强大的 Python 数据可视化库。本文介绍了一系列高级示例,展示了各种绘图类型。请尝试使用所提供的代码示例,深入了解 Seaborn的功能,提高大家数据可视化的技能。

您学废了嘛?

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

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

相关文章

如何通过前端表格控件在10分钟内完成一张分组报表?

前言: 当今时代,报表作为信息化系统的重要组成部分,在日常的使用中发挥着关键作用。借助报表工具使得数据录入、分析和传递的过程被数字化和智能化,大大提高了数据的准确性及利用的高效性。而在此过程中,信息化系统能…

考研入门55问---基础知识篇

考研入门55问---基础知识篇 01 >什么是研究生入学考试? 研究生是指大专和本科之后的深造课程。以研究生为最高学历, 研究生毕业后,也可称研究生,含义为研究生学历的人。在中国大陆地区,普通民众一般也将硕士毕业生称…

【软考高项】四十二、八大绩效域知识点

一、干系人绩效域 预期目标 建立高效的工作关系 检查:干系人参与的连续性 干系人认同项目目标 检查: 变更频率 支持项目的干系人提高了满意度,从中受益 检查:干系人行为、干系人满意度、干系人相…

2024年5月10日有感复盘

2024年5月10日有感复盘 时间 今天是一个很美好的一天,原因是很平凡,读书很平凡,玩游戏很平凡,然后生活很平凡,未来可期,听歌很舒服,很喜欢一个人呆在图书馆的感觉,很喜欢发呆&…

初识java--javaSE(3)--方法,递归,数组,

文章目录 一 方法的使用1.1 什么是方法?main方法注意事项 1.2 方法的调用嵌套调用在方法调用时形参与实参的关系: 1.3 方法的重载方法重载的意义?总结方法重载:方法签名: 二 递归什么是递归?递归的精髓&…

分布式与一致性协议之一致哈希算法(二)

一致哈希算法 使用哈希算法有什么问题 通过哈希算法,每个key都可以寻址到对应的服务器,比如,查询key是key-01,计算公式为hash(key-01)%3,警告过计算寻址到了编号为1的服务器节点A,如图所示。 但如果服务器数量发生变化&#x…

libcity笔记:详细流程(以DeepMove为例)

0 前置操作 这边我选择了gowalla的前1000条数据做例子: 0.1 生成样例dyna import pandas as pd geopd.read_csv(/home_nfs/liushuai/Bigscity-LibCity/raw_data/gowalla_test/gowalla.dyna)geo_tstgeo.iloc[:1000,:] geo_tst geo_tst.to_csv(/home_nfs/liushuai/…

【RAG 博客】RAG 应用中的 Routing

Blog:Routing in RAG-Driven Applications ⭐⭐⭐⭐ 根据用户的查询意图,在 RAG 程序内部使用 “Routing the control flow” 可以帮助我们构建更实用强大的 RAG 程序。路由模块的关键实现就是一个 Router,它根据 user query 的查询意图&…

docker私有仓库registry

简介 Docker私有仓库的Registry是一个服务,主要用于存储、管理和分发Docker镜像。具体来说,Registry的功能包括: 存储镜像:Registry提供一个集中的地方来存储Docker镜像,包括镜像的层次结构和元数据。 版本控制&…

【Unity 实用工具篇】 | UIEffect 实现一系列UGUI特效,灰度、负片、像素化特效

前言【Unity 实用工具篇】 | UIEffect 实现一系列UGUI特效,灰度、负片、像素化特效一、UGUI特效插件:UIEffect1.1 介绍1.2 效果展示1.3 使用说明及下载二、组件属性面板三、代码操作组件四、组件常用方法示例4.1 使用灰度特效做头像(关卡)选择总结

【C/C++笔试练习】DNS设置文件、应用层、Dos攻击、DNS服务、DNS、子网划分、http状态、路由设置、TCP连接、HTTP状态码、剪花布条、客似云来

文章目录 C/C笔试练习选择部分(1)DNS设置文件(2)应用层(3)Dos攻击(4)DNS服务(5)DNS(6)子网划分(7)http状态&am…

日报表定时任务优化历程

报表需求背景 报表是一个很常见的需求,在项目中后期往往会需要加多种维度的一些统计信息,今天就来谈谈上线近10个月后的一次报表优化优化之路(从一天报表跑需要五分钟,优化至秒级) 需求:对代理商进行日统计…

视频合并有妙招:视频剪辑一键操作,批量嵌套合并的必学技巧

在数字时代的今天,视频已经成为我们日常生活和工作中不可或缺的一部分。无论是记录生活点滴,还是制作专业项目,视频合并都是一个常见的需求。然而,对于许多人来说,视频合并却是一个复杂且繁琐的过程。现在有云炫AI智剪…

第七届精武杯部分wp

第一部分:计算机和手机取证 1.请综合分析计算机和手机检材,计算机最近一次登录的账户名是 答案:admin 创建虚拟机时直接给出了用户名 2. 请综合分析计算机和手机检材,计算机最近一次插入的USB存储设备串号是 答案&#xff1a…

6.python网络编程

文章目录 1.生产者消费者-生成器版2.生产者消费者--异步版本3.客户端/服务端-多线程版4.IO多路复用TCPServer模型4.1Select4.2Epoll 5.异步IO多路复用TCPServer模型 1.生产者消费者-生成器版 import time# 消费者 def consumer():cnt yieldwhile True:if cnt < 0:# 暂停、…

创新指南 | 生成式AI如何引领企业创新未来?

2023年麦肯锡全球数字战略调查了1000多名受访者&#xff0c;发现&#xff1a;建立创新文化的组织与它们应用包括生成式AI在内的最新数字技术提高产出的能力之间有着惊人的强关联。 本文探讨了顶尖创新企业采取的五项行动&#xff0c;使它们与同行之间拉开距离&#xff0c;并在使…

【Linux系统】进程

本篇博客整理了进程的多方面知识&#xff0c; 旨在从进程的概念、管理、属性、创建等方面让读者更加全面系统地理解进程和操作系统的管理设计。 目录 一、进程是什么 二、操作系统如何管理进程 1.描述进程 PCB 2.组织进程 3.再谈进程和进程管理 三、Linux下的进程管理 1…

Docker Compose:简化多容器应用部署

序言 在当今的软件开发中&#xff0c;容器化技术的使用已经很普遍了。而 Docker 作为其中最流行的容器化平台之一&#xff0c;为开发者提供了方便、快捷、一致的开发和部署环境。但是&#xff0c;当我们的应用开始变得更加复杂&#xff0c;涉及到多个容器时&#xff0c;手动管…

在 Kubernetes 上运行 Apache Spark 进行大规模数据处理的实践

在刚刚结束的 Kubernetes Community Day 上海站&#xff0c;亚马逊云科技在云原生分论坛分享的“在 Kunernets 上运行 Apache Spark 进行大规模数据处理实践”引起了现场参与者的关注。开发者告诉我们&#xff0c;为了充分利用 Kubernetes 的高可用设计、弹性&#xff0c;在越来…

AI + Web3 如何打造全新创作者经济模型?

可编程 IP 的兴起&#xff0c;借助人工智能极大提高创作效率和效能&#xff0c;让 Web3 用户体会到了自主创作和产品制作的乐趣。然而&#xff0c;你知道 AI 时代来临的背景下&#xff0c;创作者经济模型又该如何在 Web3 技术的加持下走向更成熟的运作轨道吗&#xff1f;第 43 …