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

相关文章:

  • Python 库 包 accelerate
  • 插入排序的简单介绍
  • 百度文心大模型4.5系列正式开源,同步开放API服务
  • 百度文心大模型4.5系列正式开源,开源会给百度带来什么?
  • MongoDB 安装使用教程
  • 御控助力打造物联网实训室,赋能职业教育高质量发展
  • I/O I/O基本概念与基本I/O函数 6.30
  • YOLOv12_ultralytics-8.3.145_2025_5_27部分代码阅读笔记-autobackend.py
  • LeetCode Hot100(图论)
  • huggingface----深度学习 Diffusers 库
  • TCPView v4.19 网络检测和拦截工具——东方仙盟
  • 类图+案例+代码详解:软件设计模式----生成器模式(建造者模式)
  • 炸鸡派-基础测试例程
  • STM32 驱动 ADS1015 单端 差分 多通道模式 ADC 转换
  • 海康相机总是抓取前一帧图像
  • jenkins集成sonarqube(使用token进行远程调用)
  • ShardingSphere完成MySQL集群部署
  • RK3588高性能处理器核心技术解析
  • MLOps 基础:驯服模型生命周期的科学
  • GitHub Actions 入门指南:从零开始自动化你的开发流程
  • 手机屏暗点缺陷修复及相关液晶线路激光修复原理
  • 超大js文件多层级引用缓存在网络较差的时候无法调用使用问题
  • BERT 模型详解:结构、原理解析
  • RWKV-8 系列之 DeepEmbedAttention:精简 KV 缓存,尤其适合混合模型(RWKV-7s)
  • MySQL 慢查询日志详解
  • 小白excel中使用VBA
  • [国家电网备考]操作系统
  • 飞算JavaAI 2.0.0深度测评:自然语言编程如何重构开发生产力?
  • 《微信生态裂变增长利器:推客小程序架构设计与商业落地》
  • 【Python使用】嘿马云课堂web完整实战项目第2篇:CMS页面管理需求,后端工程搭建【附代码文档】