Seaborn:基于 Matplotlib 的高级绘图库,提供了更高级的接口来绘制吸引人的统计图形。

news2024/11/13 15:05:20

引言

Seaborn 是基于 Matplotlib 的高级数据可视化库,专为绘制统计图形而设计。相比于 Matplotlib,Seaborn 提供了更高级的接口,简化了绘图过程,同时默认的美观配色和样式使得图形更加吸引人。Seaborn 特别适合用于探索性数据分析和统计建模,其简洁的 API 使用户能够轻松创建复杂的图形,快速洞察数据中的模式、关系和分布。

Seaborn 与 Pandas 紧密集成,支持直接使用 Pandas DataFrame 数据结构。它内置了多种常用的统计图形类型,如分布图、分类图、回归图、热力图等,能够满足大部分统计数据可视化的需求。Seaborn 在数据分析、数据科学和机器学习领域得到了广泛应用,是 Python 可视化领域的重要工具。

核心特性

1. 主题设置与样式管理
  • 默认主题与样式:Seaborn 提供了美观的默认主题和样式,用户无需手动设置即可生成出版质量级别的图形。默认主题具有更协调的配色和更符合视觉美学的图形元素。
  • 自定义主题:通过 set_style 函数,用户可以选择不同的主题(如 whitegriddarkgridwhitedarkticks),适应不同的数据展示需求。同时,Seaborn 还允许用户通过 set_context 函数设置图形的上下文(如 papernotebooktalkposter),以调整图形的比例和元素的大小。
2. 数据分布可视化
  • 直方图与密度图:Seaborn 的 displot 函数可以同时绘制直方图和核密度估计(KDE)图,用于展示数据的分布情况。kdeplot 函数可以单独绘制 KDE 图,而 rugplot 函数则可以在图形底部添加数据的原始观测值。
  • 联合分布图jointplot 函数可以展示两个变量之间的关系,并显示它们的边际分布。通过选择不同的类型参数(如 scatterkdehex 等),用户可以生成散点图、KDE 图或六边形箱图。
  • 成对关系图pairplot 函数用于绘制多变量数据集中的成对关系图,展示变量之间的相互关系和单变量的分布情况。它在探索性数据分析中非常有用,特别是用于识别变量间的相关性。
3. 分类数据可视化
  • 条形图:Seaborn 提供了 barplot 函数,用于绘制带有置信区间的条形图。它能够显示不同类别的数据平均值及其变化范围,是展示分类数据统计结果的理想选择。
  • 箱线图与小提琴图boxplotviolinplot 函数分别用于绘制箱线图和小提琴图,展示分类数据的分布、极值和中位数。小提琴图在箱线图的基础上增加了 KDE 分布信息,使得数据分布的展示更加详细。
  • 点图与条带图pointplotstripplot 函数用于绘制点图和条带图,适合展示分类数据的离散值和趋势。点图通常用于显示不同类别的平均值或其他统计量,而条带图则用于展示所有数据点的分布情况。
4. 回归与矩阵图
  • 回归图regplotlmplot 函数用于绘制回归图,展示两个变量之间的线性关系,并可选择是否显示回归直线的置信区间。Seaborn 支持线性回归、逻辑回归、多项式回归等多种回归分析。
  • 热力图heatmap 函数用于绘制二维数据的热力图,常用于展示相关矩阵或频率表。热力图通过颜色的深浅表示数值的大小,是数据可视化中非常直观的图形之一。
  • 聚类图clustermap 函数用于绘制层次聚类的热力图,自动对数据进行聚类,并根据聚类结果重新排列数据。聚类图能够帮助用户识别数据中的模式和集群结构。
5. 多样化的数据集成与图形增强
  • Pandas 数据集成:Seaborn 支持直接使用 Pandas DataFrame 进行绘图,无需手动将数据转换为其他格式。它能够自动识别数据框中的列名,并将其用作图形的标签和图例。
  • FacetGrid 与 PairGrid:Seaborn 的 FacetGridPairGrid 类允许用户通过不同的维度将数据分成多个子集,并为每个子集生成独立的图形。这种多维图形展示方法特别适合于分析多变量数据和多层次数据。
  • 图形增强:Seaborn 的图形增强功能包括自动的图例生成、颜色映射控制、数据标准化、误差条添加等,使得生成的图形更加丰富和信息化。

安装与基本使用

安装 Seaborn

Seaborn 可以通过 Python 的包管理工具 pip 进行安装。建议在虚拟环境中安装 Seaborn 以避免与其他项目的依赖冲突。

pip install seaborn

安装成功后,可以通过以下命令导入 Seaborn 并查看其版本号:

import seaborn as sns
print(sns.__version__)
基本使用示例

以下是一些 Seaborn 的基本使用示例,展示了如何创建不同类型的统计图形并进行常见的自定义操作。

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

# 生成一些随机数据
data = np.random.randn(1000)

# 绘制数据的分布图
sns.displot(data, kde=True)
plt.title('Histogram and KDE Plot')
plt.show()

# 使用内置数据集进行分类绘图
tips = sns.load_dataset('tips')

# 绘制带有置信区间的条形图
sns.barplot(x='day', y='total_bill', data=tips)
plt.title('Bar Plot with Confidence Interval')
plt.show()

# 绘制回归图
sns.regplot(x='total_bill', y='tip', data=tips)
plt.title('Regression Plot')
plt.show()

# 绘制热力图
corr = tips.corr()
sns.heatmap(corr, annot=True, cmap='coolwarm')
plt.title('Correlation Heatmap')
plt.show()
案例一:使用displot进行双变量分布可视化

在这个案例中,我们将使用displot函数来同时展示两个变量的分布以及它们之间的关系。假设我们有一个包含身高(height)和体重(weight)的数据集。

import seaborn as sns  
import matplotlib.pyplot as plt  
import pandas as pd
import numpy as np

  
# 假设的数据集  
data = {  
    'height': np.random.normal(170, 10, 200),  
    'weight': np.random.normal(70, 15, 200)  
}  
df = pd.DataFrame(data)  
  
# 使用displot展示两个变量的分布  
sns.displot(df, x="height", y="weight", kind="kde", cmap="coolwarm")  
plt.title('Bivariate KDE Plot of Height and Weight')  
plt.show()

案例二:使用pairplot进行多变量关系探索

在这个案例中,我们将使用pairplot函数来探索tips数据集中多个变量之间的关系。

import seaborn as sns
import matplotlib.pyplot as plt

# 加载内置数据集
tips = sns.load_dataset('tips')

# 绘制多变量关系图
g = sns.pairplot(tips, hue="time", palette="husl")

# 使用suptitle添加标题,并通过y参数调整其位置
plt.suptitle('Pairplot of Tips Dataset with Time as Hue', y=1.05)  # y参数控制标题的垂直位置

plt.show()

案例三:使用violinplot展示分类数据的分布

在这个案例中,我们将使用violinplot函数来展示不同类别下数据的分布情况。假设我们有一个包含不同类别(category)和对应数值(value)的数据集。

import seaborn as sns  
import numpy as np  
import matplotlib.pyplot as plt
import pandas as pd
  
# 假设的数据集  
data = {  
    'category': ['A'] * 50 + ['B'] * 50,  
    'value': np.concatenate([np.random.normal(0, 1, 50), np.random.normal(1, 1.5, 50)])  
}  
df = pd.DataFrame(data)  
  
# 绘制小提琴图  
sns.violinplot(x="category", y="value", data=df, palette="Set2")  
plt.title('Violin Plot of Values by Category')  
plt.show()

案例四:使用heatmap展示相关矩阵

在这个案例中,我们将使用heatmap函数来展示一个数据集的相关矩阵,以揭示不同变量之间的相关性。

import seaborn as sns  
import pandas as pd  
import matplotlib.pyplot as plt
  
# 假设的数据集  
data = {  
    'X': np.random.normal(0, 1, 100),  
    'Y': np.random.normal(0, 1, 100) + np.random.normal(0, 0.5, 100),  
    'Z': np.random.normal(0, 1, 100) - np.random.normal(0, 0.5, 100)  
}  
df = pd.DataFrame(data)  
  
# 计算相关矩阵  
corr = df.corr()  
  
# 绘制热力图  
sns.heatmap(corr, annot=True, cmap="coolwarm")  
plt.title('Correlation Heatmap')  
plt.show()

案例五:使用FacetGrid进行条件数据可视化

在这个案例中,我们将使用FacetGrid来根据某个条件(如性别)将数据分成多个子集,并为每个子集绘制独立的图形。

import seaborn as sns  
import pandas as pd  
import matplotlib.pyplot as plt
  
# 加载内置数据集  
tips = sns.load_dataset('tips')  
  
# 使用FacetGrid根据性别分组绘制直方图  
g = sns.FacetGrid(tips, col="sex", hue="sex", palette="Set1", height=5)  
g.map(sns.histplot, "total_bill", kde=True)  
g.add_legend()  
plt.title('Histograms of Total Bill by Sex')  
plt.show()

结论

Seaborn 是基于 Matplotlib 的高级绘图库,通过提供更高级的接口和默认美观的样式,使得统计数据的可视化变得简单而直观。Seaborn 的优势在于其简洁的 API、强大的数据集成和丰富的图形类型,特别适合用于探索性数据分析和统计建模。掌握 Seaborn 能够帮助用户更高效地分析数据、展示结果,并在数据科学工作流程中发挥重要作用。

更多资源

  • Seaborn库官方文档

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

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

相关文章

Cesium 实战 - 自定义纹理材质系列之 - 半球雷达效果(力场闪烁)

Cesium 实战 - 自定义纹理材质系列之 - 半球雷达效果(力场闪烁) 核心代码完整代码在线示例Cesium 给实体对象(Entity)提供了很多实用的样式,基本满足普通项目需求; 但是作为 WebGL 引擎,肯定不够丰富,尤其是动态效果样式。 对于实体对象(Entity),可以通过自定义材…

springsecurity 登录认证一(ajax)

一、准备工作 1.1 导入依赖 因springboot 3.0 以上版本只能支持java17 顾使用2.5.0 版本 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.0</version><…

CSDN AI-WEB-1.0 攻略

找到一个目标靶场的IP &#xff0c; 这里以172.16.1.98 为例 1、使用命令 /robots.txt 来确定目录 2、分别测试两个文件 均无法访问&#xff0c;可返回其根目录查询 3、到根目录&#xff0c;出现搜索框 4、输入ID为1 5、使用虚拟机kali的终端 搜索命令 dirsearch -u http:…

Python青少年简明教程:基础知识

Python青少年简明教程&#xff1a;基础知识 Python是大小写敏感的语言。编程语言中的“大小写敏感”意味着该语言在识别标识符、关键字或者其他语法元素时&#xff0c;会区分字母的大小写。在这种语言中&#xff0c;大写字母和小写字母被视为不同的字符&#xff0c;因此&#x…

[论文翻译]使用 BERT 检测安卓恶意软件

Android Malware Detection Using BERT Souani B, Khanfir A, Bartel A, et al. Android malware detection using bert[C]//International Conference on Applied Cryptography and Network Security. Cham: Springer International Publishing, 2022: 575-591. 摘要 在本文…

cad文件被写保护怎么解除保护?

CAD文件被写保护怎么解除保护?四五设计网小编给大家整理出的方法希望能够帮助到大家&#xff01; 解除CAD文件写保护的最简单方法是创建一个文件的副本&#xff0c;并在副本上进行编辑。 原文件可能因为文件属性或权限设置而被设置为写保护。创建副本不会改变原始文件的保护…

指针详解(六)

目录 1. sizeof 和 strlen 1&#xff09;sizeof 2&#xff09;strlen 3&#xff09;sizeof 和 strlen的区别 2. 数组和指针试题解析 1&#xff09;一维数组 2&#xff09;字符数组 3&#xff09;二维数组 3. 指针运算试题解析 1. sizeof 和 strlen 1&#xff09;sizeo…

【hot100篇-python刷题记录】【全排列】

R5-回溯篇 思路也是如下&#xff1a; 层层固定 class Solution:def permute(self, nums: List[int]) -> List[List[int]]:#x代表当前固定/选择的数的下标def dfs(x):if xlen(nums)-1:ret.append(list(nums))returnfor i in range(x,len(nums)):#交换&#xff0c;将nums[i]固…

SAP_MM模块-MASS批量操作技巧

业务背景: 现在想要获得平台的流量券,每天必须要发两篇文章才行,但是一天发两篇的话,按照我的写作风格,很难写得出来~~我又不想把原本一篇完整的文章给拆分开来,那怎么办呢??今天就讲一下我常用的批量操作事务码MASS吧。 一、功能概述; MASS是系统标准的批量操作程序,…

HCIP第十一(生成树基础知识点)

企业网三层架构-冗余&#xff08;线路&#xff0c;设备&#xff0c;网关&#xff0c;电源Ups&#xff09; 三层架构-冗余&#xff0c;线路冗余&#xff1a;二层桥接技术 一台交换机上的一个接口可以映射多个MAC地址&#xff0c;但是一个MAC地址只能对应一个接口 当交换机触环…

2024.8.19 学习记录 —— 作业

一、TCP机械臂测试 #include <myhead.h>#define SER_PORT 8888 // 与服务器保持一致 #define SER_IP "192.168.0.114" // 服务器ip地址int main(int argc, const char *argv[]) {// 创建文件描述符打开键盘文件int fd open("/dev/input/event1…

设备实时数据采集:开启制造业智能化、自动化的新篇章

传统制造业在进行生产过程中&#xff0c;会涉及到设备实时数据采集需求&#xff0c;这些数据对于监控生产流程、优化生产效率、保证产品质量以及降低成本等方面至关重要。以下是一些常见的数据采集需求&#xff1a; 1.生产数据&#xff1a;包括生产数量、生产批次、生产速度等&…

Facebook与区块链:社交网络如何融入去中心化技术

随着区块链技术的飞速发展&#xff0c;去中心化理念逐渐渗透到各个领域&#xff0c;社交网络也不例外。作为全球领先的社交平台&#xff0c;Facebook在这一趋势下开始积极探索区块链技术的潜力&#xff0c;希望利用这一前沿技术来提升平台的安全性、透明度和用户控制权。本文将…

Maven-02.介绍安装

一.介绍 首先从本地仓库中寻找所需要的jar包&#xff0c;如果没有就从中央仓库中寻找。然后从中央仓库中下载使用。但是中央仓库的服务器在国外&#xff0c;因此速度和稳定性都不好&#xff0c;因此我们在中间设立远程仓库&#xff08;私服&#xff09;&#xff0c;远程仓库一般…

光伏气象站——提升光伏发电效率和稳定运行

光伏气象站作为现代光伏电站的必备组成部分&#xff0c;‌特别适用于地理分布广泛、‌气象条件复杂多变的地区&#xff0c;‌如山区、‌森林或分散的屋顶安装等。‌这些地方由于可能存在微气候差异&#xff0c;‌对光伏系统的运行效率和性能有着显著影响。‌因此&#xff0c;‌…

LeetCode:3148. 矩阵中的最大得分(DP Java)

目录 3148. 矩阵中的最大得分 题目描述&#xff1a; 实现代码与解析&#xff1a; DP 原理思路&#xff1a; 3148. 矩阵中的最大得分 题目描述&#xff1a; 给你一个由 正整数 组成、大小为 m x n 的矩阵 grid。你可以从矩阵中的任一单元格移动到另一个位于正下方或正右侧…

STM32裸机和RTOS中的线程安全问题及STM32cubeMX中的线程安全策略

STM32线程安全问题 术语“线程” 和“多线程” 适用于裸机和基于RTOS的应用程序&#xff0c;线程安全问题并不只存在于基于RTOS的应用程序中&#xff1b;裸机应用程序中也存在这个问题&#xff0c;在裸机应用程序中&#xff0c;中断服务程序允许调用C库函数。线程安全问题可能…

『Z-Workshop』 The Graph workshop mini hackathon活动

Community Meetup In Hangzhou ZJUBCA 2024 求是 创新 概述 / OVERVIEW The Graph作为一个去中心化的查询协议&#xff0c;为区块链数据的索引和查询提供了强大的支持。我们希望通过这场黑客松&#xff0c;激发大家对区块链技术更深层次的探索和应用&#xff0c;共同推动这一…

第七十四:前端实现点击页面某个菜单跳转到对应的锚点功能

1.用js来实现 scrollIntoView方法 先定义个id或者class随意&#xff0c;因为我是循环好几个小模块所以用动态的来实现 点击的时候传对应的类名进行滑动 document.getElementById(item.variableCode).scrollIntoView({behavior:“smooth”}); 加上behavior:“smooth” 进行平…

为Linux/centos虚拟机已有硬盘扩容

为Linux已有硬盘扩容 旧盘扩容的大体流程与关键命令&#xff1a; 为虚拟机磁盘加容量&#xff1b; 为磁盘新容量分区&#xff08;fdisk&#xff09;&#xff1b; 将分区信息写入内核&#xff08;partx&#xff09;&#xff1b; 为分区创建物理卷&#xff08;pvcreate&#xff0…