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

news2024/12/28 17:47:21

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.coloradmin.cn/o/1666760.html

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

相关文章

半小时搞懂STM32面经知识点——IIC

1.IIC 1.1什么是IIC? 同步半双工通信协议,适用于小数据和短距离传输。 1.2 IIC需要几条线? IIC总共有2条通信总线(SDA,SCL),SCL为时钟同步线,用于主机和从机间数据同步操作;SDA为…

Qt开发常见报错大全与解决办法

下面的报错是我日常开发经常遇到的,对着下面的解决方法一招搞定就行了。 我们没必要都去记住,只需要见方抓药即可。 目前版本有27个常见报错,持续更新中。 常见报错 翻译不起作用 你可能改了类名字,但是.ts文件里没有跟着改。 Cannot send events to objects owned by a…

多线程-线程安全

目录 线程安全问题 加锁(synchronized) synchronized 使用方法 synchronized的其他使用方法 synchronized 重要特性(可重入的) 死锁的问题 对 2> 提出问题 对 3> 提出问题 解决死锁 对 2> 进行解答 对4> 进行解答 volatile 关键字 wait 和 notify (重要…

线下研讨会 技术沙龙|乐鑫芯片与 ESP RainMaker® 为科技初创企业赋能

众多科技初创企业在智能硬件市场迅猛发展的背景下,对不断变化的需求展现出了高度的敏锐性,期望能够快速将其转化为切实的产品方案。然而,面对复杂繁重的软硬件集成任务,这些企业往往容易陷入研发瓶颈、资金短缺以及效率低下等多重…

Mybatis技术内幕-基础支撑层

整体架构 MyBatis 的整体架构分为三层, 分别是基础支持层、核心处理层和接口层。 基础支持层 基础支持层包含整个MyBatis 的基础模块,这些模块为核心处理层的功能提供了良好的支撑。 解析器模块 XPathParser MyBatis提供的XPathParser 类封装了XPat…

HackMyVM-Minimal

目录 信息收集 arp nmap nikto whatweb WEB web信息收集 gobuster 文件包含漏洞 提权 web信息收集 main方法 question_1 question_2 question_3 prize.txt 软连接 信息收集 arp ┌──(root?0x00)-[~/HackMyVM] └─# arp-scan -l Interface: eth0, type: E…

centos7.9系统安全加固

1、限制用户登陆 vim /etc/hosts.deny,若禁止192.168.0.158对服务器进行ssh的登陆,添加如下内容 sshd : 192.168.0.158 添加完毕后就生效了,直接用192.168.0.158访问主机,就无法连接了,显示 Connection closing...Soc…

pycharm报错Process finished with exit code -1073740791 (0xC0000409)

pycharm报错Process finished with exit code -1073740791 (0xC0000409) 各种垃圾文章(包括chatgpt产生的垃圾文章),没有给出具体的解决办法。 解决办法就是把具体报错信息显示出来,然后再去查。 勾选 然后再运行就能把错误显示…

图像分割各种算子算法-可直接使用(Canny、Roberts、Sobel)

Canny算子: import numpy as np import cv2 as cv from matplotlib import pyplot as pltimg cv.imread("../test_1_1.png") edges cv.Canny(img, 100, 200)plt.subplot(121),plt.imshow(img,cmap gray) plt.title(Original Image), plt.xticks([]), …

vue2+swiper——实现多图轮播+层叠轮播——技能提升

今天看到同事在写轮播图,由于是jq的写法,我没有过多参与,我只写vue的部分。。。虽然语言不一样,但是用法还是要会的。下面介绍通过swiper组件来实现轮播效果。 解决步骤1:安装swiper npm install swiper5.4.5 我这边…

数据分享—全国分省河流水系

河流水系数据是日常研究中必备的数据之一,本期推文主要分享全国分省份的水系和河流数据,梧桐君会不定期的更新数据,欢迎长期订阅。 数据预览 山东省河流水系 吉林省河流水系 四川省河流水系 数据获取方式 链接:https://pan.baidu.…

基于阿里云向量检索 Milvus 版与 PAI 搭建高效的检索增强生成(RAG)系统

阿里云向量检索 Milvus 版现已无缝集成于阿里云 PAI 平台,一站式赋能用户构建高性能的检索增强生成(RAG)系统。您可以利用 Milvus 作为向量数据的实时存储与检索核心,高效结合 PAI 和 LangChain 技术栈,实现从理论到实…

网络基础(三)——网络层

目录 IP协议 1、基本概念 2、协议头格式 2.1、报头和载荷如何有效分离 2.2、如果超过了MAC的规定,IP应该如何做呢? 2.3、分片会有什么影响 3、网段划分 4、特殊的ip地址 5、ip地址的数量限制 6、私有ip地址和公网ip地址 7、路由 IP协议 网络…

LINUX 精通 1——2.1.1 网络io与io多路复用select/poll/epoll

LINUX 精通 1 day12 20240509 算法刷题: 2道高精度 耗时 107min 课程补20240430 耗时:99 min day 13 20240512 耗时:200min 课程链接地址 前言 杂 工作5-10年 够用 费曼:不要直接抄,自己写;不要一个…

【微服务】spring aop实现接口参数变更前后对比和日志记录

目录 一、前言 二、spring aop概述 2.1 什么是spring aop 2.2 spring aop特点 2.3 spring aop应用场景 三、spring aop处理通用日志场景 3.1 系统日志类型 3.2 微服务场景下通用日志记录解决方案 3.2.1 手动记录 3.2.2 异步队列es 3.2.3 使用过滤器或拦截器 3.2.4 使…

安全工程师面试题

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

【全开源】Java俱乐部系统社区论坛商城系统源码-奔驰奥迪保时捷大众宝马等汽车俱乐部

特色功能: 会员中心:会员中心可以帮助企业更好地管理客户,包括设置积分商城、会员卡充值、个人汽车档案等功能,对不同的会员群体展开有针对性的营销,并维护和积累自己的粉丝群体。信息服务:负责定期发布新…

后端项目开发笔记

Maven打包与JDK版本不对应解决方法 我这里使用jdk8。 <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configurat…

【Docker】Ubunru下Docker的基本使用方法与常用命令总结

【Docker】docker的基本使用方法 镜像image与容器container的关系基本命令- 查看 Docker 版本- 拉取镜像- 查看系统中的镜像- 删除某个镜像- 列出当前 Docker 主机上的所有容器&#xff0c;包括正在运行的、暂停的、已停止的&#xff0c;以及未运行的容器- 列出当前 Docker 主机…

day05-面向对象内存原理和数组

day05 面向对象内存原理和数组 我们在之前已经学习过创建对象了,那么在底层中他是如何运行的。 1.对象内存图 1.1 Java 内存分配 Java 程序在运行时&#xff0c;需要在内存中分配空间。为了提高运算效率&#xff0c;就对空间进行了不同区域的划分&#xff0c;因为每一片区域…