当前位置: 首页 > news >正文

Python 数据分析与机器学习入门 (六):Seaborn 可视化技巧,图表更美观

引言:Matplotlib 与 Seaborn 的关系

在上一篇文章中,我们学习了 Matplotlib,它是 Python 数据可视化的基石,提供了强大的底层绘图能力和极高的定制自由度。然而,要用 Matplotlib 创建出既美观又包含复杂统计信息(如置信区间、分布密度)的图表,往往需要编写大量的代码。

Seaborn 的出现正是为了解决这一问题。它是一个构建在 Matplotlib 之上的高级可视化库。Seaborn 并非要取代 Matplotlib,而是作为其强大的补充。

你可以将它们的关系想象成这样:如果 Matplotlib 是一个让你能精确控制每一个像素的绘图工具箱,那么 Seaborn 就是一套为常用统计图形设计的精美模板。它能让你用更少的代码、更直观的 API,轻松创建出信息丰富且视觉上更吸引人的图表。

下表清晰地对比了两者的特点:

特性MatplotlibSeaborn
抽象层次低层次,命令式(控制每个细节)高层次,声明式(声明你想要什么)
主要用途基础绘图,完全定制统计数据可视化,快速探索
易用性复杂图表代码量大,学习曲线陡峭常用统计图代码简洁,默认样式美观
数据格式主要处理 NumPy 数组和列表专为 Pandas DataFrame 设计
核心优势极致的灵活性和精细控制美观的默认设置,内置统计功能

Seaborn 的高级绘图函数

Seaborn 的一个核心设计理念是其函数与数据分析任务直接对应。例如,你想探索“两个变量间的关系”或“某个变量的分布情况”,Seaborn 都有专门的函数族来应对。Seaborn 函数的一大优点是能与 Pandas DataFrame 无缝集成,你只需指定 DataFrame 和列名即可。

关系图 (Relational Plots)

用于探索两个数值变量之间的关系。sns.scatterplot()sns.lineplot() 是其中的代表。通过 hue 参数,可以轻松引入第三个分类变量,用颜色来区分数据点。

import seaborn as sns
import matplotlib.pyplot as plt# Seaborn 自带了一些示例数据集
tips = sns.load_dataset("tips")# 绘制散点图,探索总账单与小费的关系,并用是否吸烟区分颜色
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="smoker")
plt.title('Total Bill vs. Tip by Smoker')
plt.show()

分布图 (Distribution Plots)

用于可视化单个变量的分布情况。sns.histplot() (直方图) 和 sns.kdeplot() (核密度估计图) 是最常用的两种。

# 绘制总账单的直方图,并叠加核密度估计曲线
sns.histplot(data=tips, x="total_bill", kde=True)
plt.title('Distribution of Total Bill')
plt.show()

分类图 (Categorical Plots)

这是 Seaborn 的一大特色,专门用于可视化一个数值变量与一个或多个分类变量之间的关系。这类图可以分为三个子类:

  • 分类散点图:
    • sns.stripplot(): 简单的散点图,可以用 jitter 参数避免点重叠。
    • sns.swarmplot(): “蜂群图”,自动调整点的位置以避免重叠,能更好地展示分布。
  • 分类分布图:
    • sns.boxplot(): 箱形图,展示数据的五数概括(最小值、第一四分位数、中位数、第三四分位数、最大值)和异常点。
    • sns.violinplot(): 小提琴图,结合了箱形图和核密度估计,能更详细地展示数据的分布形态。
  • 分类估计图:
    • sns.barplot(): 条形图,展示每个分类的集中趋势估计值(默认为均值)和置信区间。
    • sns.countplot(): 计数图,展示每个分类的观测数量。

示例:使用箱形图比较每日小费的分布

sns.boxplot(data=tips, x="day", y="total_bill")
plt.title('Total Bill Distribution by Day')
plt.show()

图形级函数:relplot()catplot() 的威力

Seaborn 的设计中有一个非常重要的概念:图形级 (Figure-level) 函数与坐标轴级 (Axes-level) 函数的区别。

  • 坐标轴级函数: 如 scatterplot(), boxplot() 等,它们在一个给定的 Matplotlib Axes 上绘图。这让你可以在一个 Figure 上灵活地组合多个不同的图。
  • 图形级函数: 如 relplot()catplot(),它们是对应函数族的统一接口。它们会自己创建一个 Matplotlib Figure 和一个或多个 Axes,并管理整个图表的布局。

图形级函数的最大优势在于能够通过 colrow 参数轻松创建分面网格 (faceted plots),即根据一个或两个分类变量的值,将数据拆分到不同的子图中进行展示。

示例:使用 relplot() 创建分面散点图

# 探索总账单与小费的关系,但按“时间”(午餐/晚餐) 分成两列子图,
# 并在每个子图内用“是否吸烟”区分颜色
sns.relplot(data=tips, x="total_bill", y="tip", col="time", hue="smoker")
plt.show()

这短短一行代码就创建了一个包含两个子图的复杂可视化,清晰地展示了四维数据(总账单、小费、时间、是否吸烟)之间的关系。如果用 Matplotlib 手动实现,代码量会大得多。

理解图形级和坐标轴级函数的区别,是从 Seaborn 初学者迈向高手的关键一步。 它决定了你是想在一个现成的画板上添一笔(使用坐标轴级函数),还是想让 Seaborn 帮你规划好一整套画廊(使用图形级函数)。

总结与展望

本篇我们探讨了 Seaborn 如何作为 Matplotlib 的高级封装,极大地简化了统计可视化的过程。我们学习了其核心的绘图函数类别,并重点理解了图形级函数(如 relplot)和坐标轴级函数(如 scatterplot)之间的关键区别。

至此,我们已经掌握了数据处理和可视化的核心工具。接下来,我们将进入本系列最激动人心的部分——机器学习。在下一篇文章中,我们将首先建立起对机器学习核心概念的理解,为后续的动手实践打下坚实的理论基础。

http://www.dtcms.com/a/263408.html

相关文章:

  • 飞算 JavaAI 深度实战:从老项目重构到全栈开发的降本增效密码
  • Windows如何安装beego环境问题解
  • 正交视图三维重建2 笔记 2d线到3d线2 先生成3d线然后判断3d线在不在
  • 推进自动驾驶车辆智能:基于深度学习和多模态LLM的交通标志识别与鲁棒车道检测
  • 告别复杂爬虫!Perplexity AI辅助Python网页抓取
  • 爬虫详解:Aipy打造自动抓取代理工具
  • Day113 切换Node.js版本、多数据源配置
  • RHCSA认证题目练习一(配置网络设置)
  • Centos7在yum当中遇到Could not resolve host: mirrorlist.centos.org解决方案
  • 高效读取文件中指定行段的两种方法
  • Golang 标准库errors用法
  • Golang快速开发框架——项目立项与系统配置读取组件viper(一)
  • 《如何在 Spring 中实现 MQ 消息的自动重连:监听与发送双通道策略》
  • Doc2X:破解RAG文档解析难题的核心引擎
  • 自由学习记录(65)
  • PO→DO→DTO→VO 和 DAO → DTO → VO
  • w-笔记:uni-app的H5平台和非H5平台的拍照识别功能:
  • 数据可视化:5 分钟读懂其核心价值与技术实践
  • PyTorch 中 nn.Linear() 参数详解与实战解析(gpt)
  • Python + Selenium 自动化爬取途牛动态网页
  • Qt Quick 与 QML(四)qml中的Delegate系列委托组件
  • 七天学会SpringCloud分布式微服务——05——OpenFeign
  • 基于时间策略+应用过滤的游戏防沉迷方案:技术实现与工具推荐
  • Python pandas-profiling 详解:一键生成数据分析报告的利器
  • 使用自定义注解完成redis缓存
  • Windows Excel文档办公工作数据整理小工具
  • SpringCloud系列(43)--搭建SpringCloud Config客户端
  • Install Ubuntu 24.04 System
  • SpringCloud系列(42)--搭建SpringCloud Config分布式配置总控中心(服务端)
  • ProPlus2024Retail 安装教程(详细步骤+激活方法)- 最新版安装包下载与使用指南