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的功能,提高大家数据可视化的技能。

您学废了嘛?

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

安全工程师面试题

安全工程师面试题安全工程师是一个非常重要的职位,他们负责保护公司的网络和系统免受黑客和恶意软件的攻击。如果你想成为一名安全工程师,那么你需要准备好面试。下面是一… 1安全工程师面试题 安全工程师是一个非常重要的职位,他们负责保护…

C++Linux系统编程——makefile

Makefile Makefile简介 一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于…

基于Django实现的校园疫情监控平台

基于Django实现的校园疫情监控平台 开发语言:Python 数据库:MySQL所用到的知识:Django框架工具:pycharm、Navicat、Maven 系统功能实现 登录注册功能 用户在没有登录自己的用户名之前只能浏览本网站的首页,想要使用其他功能都会…

sqli-labs靶场第十四关

目录 1:分析 找闭合符: 2:开始注入 报错注入: 注入数据库名: 注入表名: 注入列名: 注入具体值: 1:分析 经过我们的实验发现当我们输入的密码后面存在双引号时会报…

构建内网yum仓库

1、环境介绍 系统:龙蜥os 7.9 2、安装epel源 yum install epel-release -y3、安装nginx服务器并启动 yum install nginx httpd -y配置 server {listen 80;server_name repo.wtown.com;root /usr/share/nginx/html/repo;index index.html index.htm;location / {…

阿里云ECS服务器实例挂载数据盘步骤(磁盘自动挂载.、访问挂载点)

阿里云ECS服务器实例挂载数据盘步骤 相关指令 df -h 查看磁盘空间 du -sh * 查看使用内存大小1.磁盘自动挂载 首先登录阿里云ECS服务器,通过 df -h 命令查看当前磁盘挂载情况 通过 fdisk -l 命令查看磁盘情况,可以发现有两个盘: 系统盘 …

Ubuntu 和 Windows之间无法复制粘贴问题解决方法

需要安装open-vm-tools,官方安装open-vm-tools的网址:安装 Open VM Tools (vmware.com)

安全测试工具Nessus安装和使用

安装 下载地址:https://pan.baidu.com/s/1OaYMDdQqYI4BbZ_uUErrTw 提取码: yg2g 安装Nessus-8.14.0-x64.msi,按照提示next至安装完成,显示如下页面,点击Connect via SSL 点击“高级”、“继续访问” 选择 【Managed Scanner】选…

Visual Studio,第1个hello world,入门C++,分别编译一个可以在Windows和Linux下运行的程序

本人的VxTerm,是在Visual Studio 2022下编写的。 其它的语言工具是不是也可以那么方便的使用,本人并不得而知,至少本人能知道:对于我来说,Visual Studio可以让我觉得C/C语言非常简单! 一、安装Visual Stu…

stm32——OLED篇

技术笔记! 一、OLED显示屏介绍(了解) 1. OLED显示屏简介 二、OLED驱动原理(熟悉) 1. 驱动OLED驱动芯片的步骤 2. SSD1306工作时序 三、OLED驱动芯片简介(掌握) 1. 常用SSD1306指令 2. …

apache atlas 如何自定义hook

atals 是开源的数据元数据和数据资产管理平台,平台设计支持强大的图数数据库,nosql,和搜索引擎3个组件构建。都是基于开源构建。 目前市场上开源的元数据管理工具有Atlas, Datahub, Openmetadata等,你要说二…

进程间通信:连接不同程序世界的桥梁

目录 一、进程间通信的重要性 二、常见的进程间通信方式 三、进程间通信的目的 四、进程间通信的本质 在计算机编程的领域中,进程间通信(Inter-Process Communication,IPC)是一个至关重要的概念。当我们在操作系统中运行多个程…

Vue中进行粘贴板粘贴数据(图片、文字等)

在页面中如果需要进行粘贴数据,那么就要读取系统粘贴板clipboard,通过此Api来进行粘贴板数据的操作。 目录: 一.封装相关函数1.示例代码:2.代码解释: 二.页面中进行粘贴1.代码示例:2.代码解释: 三.运行结果…

linux day 3

touch 创建文件命令 cat命令,查看文件内容 more命令,查看文件内容。 cat是直接全部显示出来,more是支持翻页,即文件内容过多可以一页一页显示(按空格翻页,按Q进行退出) cp命令,复制…

数据结构深入理解--栈

目录 一、栈的定义 二、栈的实现 2.1 栈的结构 2.2 栈的初始化 2.3 栈的销毁 2.3 栈元素的插入 2.4 栈元素的删除 2.5 栈顶元素获取 2.6 栈元素有效个数获取 2.7 栈是否为空判断 三、代码总览 Stack.h Stack.c 测试代码:test.c 四、例题 例一: 例二&#xff…

llm.c的Makefile

源码 CC ? clang CFLAGS -Ofast -Wno-unused-result -Wno-ignored-pragmas -Wno-unknown-attributes LDFLAGS LDLIBS -lm INCLUDES CFLAGS_COND -marchnative# Find nvcc SHELL_UNAME $(shell uname) REMOVE_FILES rm -f OUTPUT_FILE -o $ CUDA_OUTPUT_FILE -o $# N…

5.神经网络-激活函数

目录 1. 激活函数不是阶跃函数 1.1 激活函数和阶跃函数都是非线性函数 1.2 激活函数不是阶跃函数 2. sigmoid 函数 2.1 sigmoid 函数表达式 2.2 sigmoid 函数 Python 实现 2.4 sigmoid 函数图 3. ReLU 函数 3.1 ReLU 函数表达式 3.2 ReLU 函数 Python 实现 3.4 ReLU…

Chatgpt的应用场景

文案创作类: 作为一名大型语言模型,ChatGPT可以为使用者提供多种文本处理和文字创作方面的服务,例如: 文本生成和创作 ChatGPT可以基于您提供的主题、关键词或文本段落,生成符合使用者要求的新文本。这些文本可以是文…

Golang | Leetcode Golang题解之第83题删除排序链表中的重复元素

题目: 题解: func deleteDuplicates(head *ListNode) *ListNode {if head nil {return nil}cur : headfor cur.Next ! nil {if cur.Val cur.Next.Val {cur.Next cur.Next.Next} else {cur cur.Next}}return head }

C++的数据结构(二)

一、链表的基本概念 链表(Linked List)是一种物理存储单元上非连续的、非顺序的线性数据结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列节点(链表中每一个元素称为节点)组成,节点…