趋近智
虽然条形图能让我们了解数值变量在不同类别中的集中趋势(如均值或中位数),但它们却不能很好地说明数据在每个类别中是如何分布的。数值是紧密集中,还是广泛散布?有很多异常值吗?为了回答这些问题并比较整体数据分布情况,我们可以使用箱线图。
箱线图(或称箱须图)简洁地展示了数据集的分布概况。它呈现了五个重要统计量:
Seaborn 的 boxplot 函数专门用于创建箱线图,使得比较不同类别的数据分布变得容易。
seaborn.boxplot 创建箱线图基本语法包括指定一个轴(通常是 x)上的分类变量,另一个轴(通常是 y)上的数值变量,以及使用 data 参数指定包含数据的 DataFrame。
我们来使用 Seaborn 自带的常用“tips”数据集。我们可以比较每周各天的总账单金额的分布情况。
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
# 加载示例数据集
tips = sns.load_dataset("tips")
# 创建箱线图
plt.figure(figsize=(8, 5)) # 调整图表大小以提高可读性
sns.boxplot(x="day", y="total_bill", data=tips, palette=["#74c0fc", "#ffc078", "#8ce99a", "#ffc9c9"])
# 添加标题和标签(可选但建议)
plt.title("每日总账单金额分布")
plt.xlabel("星期")
plt.ylabel("总账单 ($)")
# 显示图表
plt.show()
使用 Seaborn 的
boxplot函数绘制的每周各天总账单金额分布。
从上图我们可以得出一些观察结果:
与仅显示每日平均账单的条形图相比,箱线图让我们对每天账单金额的变动情况有了更全面的认识。
与其他 Seaborn 函数类似,boxplot 提供了多种自定义选项。
方向: 你可以通过交换 x 和 y 的位置或设置 orient='h' 来创建水平箱线图。
# 水平箱线图
sns.boxplot(x="total_bill", y="day", data=tips, orient='h', palette=["#74c0fc", "#ffc078", "#8ce99a", "#ffc9c9"])
plt.title("每日总账单金额分布")
plt.xlabel("总账单 ($)")
plt.ylabel("星期")
plt.show()
顺序: 使用 order 参数并传入一个类别名称列表,以控制类别的显示顺序。
# 指定日期的顺序
day_order = ["Thur", "Fri", "Sat", "Sun"]
sns.boxplot(x="day", y="total_bill", data=tips, order=day_order, palette=["#74c0fc", "#ffc078", "#8ce99a", "#ffc9c9"])
# ... (添加标题/标签并显示图表)
色调(Hue): 你可以使用 hue 参数添加另一个分类维度,这会在 x 轴上的每个主要类别中,为 hue 变量的每个水平创建独立的、并排的箱体。例如,你可以按天比较账单,并根据顾客是否吸烟进行划分。
# 将“smoker”作为色调维度添加
sns.boxplot(x="day", y="total_bill", hue="smoker", data=tips, palette="pastel")
plt.title("按日期和吸烟者状态划分的总账单分布")
plt.xlabel("星期")
plt.ylabel("总账单 ($)")
plt.show()
箱线图在你想要比较数值变量在由一个或多个分类变量定义的多个组中的分布时,特别有效。它们提供了一种快速方法来评估各组之间集中趋势、分布范围以及异常值存在情况的差异。
这部分内容有帮助吗?
boxplot 函数的官方文档,详细介绍了其参数和用法。© 2026 ApX Machine Learning用心打造