当前位置: 首页 > 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.lqws.cn/news/579025.html

相关文章:

  • 车间管理系统架构深度解析:高可用设计+工具技术选型指南
  • 机器学习,支持向量机svm和决策树xgboost介绍
  • WINDOWS最快布署WEB服务器:apache2
  • tcpdump工具交叉编译
  • 【运维系列】【ubuntu22.04】安装GitLab
  • C++STL容器:链表介绍与使用
  • Linux 日志监控工具对比:从 syslog 到 ELK 实战指南
  • 【PHP】.Hyperf 框架-collection 集合数据(内置函数归纳-实用版)
  • PHP学习笔记(十二)
  • 【Java面试】10GB,1GB内存,如何排序?
  • 时序数据库IoTDB监控指标采集与可视化指南
  • HTML中的<div>元素
  • 云效DevOps vs Gitee vs 自建GitLab的技术选型
  • docker安装MySQL,创建MySQL容器
  • APP 内存测试--Android Profiler实操(入门版)
  • 【解析】 微服务测试工具Parasoft SOAtest如何为响应式架构助力?
  • 2025年数字信号、计算机通信与软件工程国际会议(DSCCSE 2025)
  • [免费]微信小程序停车场预约管理系统(Springboot后端+Vue3管理端)【论文+源码+SQL脚本】
  • Instrct-GPT 强化学习奖励模型 Reward modeling 的训练过程原理实例化详解
  • 【Cyberstrikelab】lab2
  • 百胜软件获邀走进华为,AI实践经验分享精彩绽放
  • 使用 C++ 和 OpenCV 构建驾驶员疲劳检测软件
  • C++ STL之string类
  • 如何让宿主机完全看不到Wi-Fi?虚拟机独立联网隐匿上网实战!
  • Webpack优化详解
  • 赋能低压分布式光伏“四可”建设,筑牢电网安全新防线
  • 爬虫详解:Aipy打造自动抓取代理工具
  • UI前端与数字孪生融合新趋势:智慧医疗的可视化诊断辅助
  • 2025年XXE攻击全面防御指南:从漏洞原理到智能防护实践
  • python 利用socketio(WebSocket协议)实现轻量级穿透方案