简介
在本教程中,我们将学习如何在 Matplotlib 中自定义箱线图。箱线图是一种可视化数据集分布的常用方法。它们也被称为盒须图,用于展示数据的中位数、四分位数和异常值。我们将通过各种示例来学习如何使用 Matplotlib 自定义箱线图。
虚拟机使用提示
虚拟机启动完成后,点击左上角切换到“笔记本”标签页,以访问 Jupyter Notebook 进行练习。
有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们会及时为你解决问题。
导入所需库
我们将首先导入所需的库,即 Matplotlib 和 NumPy。我们还将为 NumPy 设置一个随机种子,以确保我们的结果是可重现的。
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(19680801)
生成数据
我们将生成一些随机数据用于示例。我们会使用 NumPy 函数random.lognormal()来生成均值为 1.5、标准差为 1.75 的对数正态分布数据。我们将生成 4 个变量的 37 个样本,并将它们存储在data变量中。我们还会为每个变量创建一个标签列表。
data = np.random.lognormal(size=(37, 4), mean=1.5, sigma=1.75)
labels = list('ABCD')
默认箱线图
我们将首先创建一个默认箱线图来可视化数据。我们会使用 Matplotlib 函数boxplot(),并将数据和标签作为参数传入。我们还会使用set_title()函数设置图表的标题。
fig, ax = plt.subplots()
ax.boxplot(data, labels=labels)
ax.set_title('Default Box Plot')
plt.show()
移除单个组件
我们可以使用boxplot()函数中可用的各种关键字参数来移除箱线图的单个组件。例如,我们可以通过将showmeans设置为False来移除均值。我们还可以分别通过将showbox和showcaps设置为False来移除箱体和须线。
fig, axs = plt.subplots(nrows=2, ncols=2, figsize=(8, 8), sharey=True)
axs[0, 0].boxplot(data, labels=labels)
axs[0, 0].set_title('Default')
axs[0, 1].boxplot(data, labels=labels, showmeans=False)
axs[0, 1].set_title('No Means')
axs[1, 0].boxplot(data, labels=labels, showbox=False, showcaps=False)
axs[1, 0].set_title('No Box or Whiskers')
axs[1, 1].boxplot(data, labels=labels, showfliers=False)
axs[1, 1].set_title('No Outliers')
plt.show()
自定义箱线图样式
我们还可以使用boxplot()函数中可用的各种关键字参数来自定义箱线图的样式。例如,我们可以通过设置boxprops来更改箱体的颜色和线条样式。我们还可以分别通过设置medianprops、meanprops和meanlineprops来更改中位数、均值和均值线的样式。
fig, axs = plt.subplots(nrows=2, ncols=2, figsize=(8, 8), sharey=True)
axs[0, 0].boxplot(data, labels=labels)
axs[0, 0].set_title('Default')
boxprops = dict(linestyle='--', linewidth=2, color='red')
axs[0, 1].boxplot(data, labels=labels, boxprops=boxprops)
axs[0, 1].set_title('Custom Box')
medianprops = dict(linestyle='-', linewidth=2, color='blue')
meanprops = dict(marker='D', markeredgecolor='black', markerfacecolor='green')
meanlineprops = dict(linestyle='--', linewidth=2, color='red')
axs[1, 0].boxplot(data, labels=labels, medianprops=medianprops, meanprops=meanprops, meanline=True, meanlineprops=meanlineprops)
axs[1, 0].set_title('Custom Median, Mean, and Mean Line')
flierprops = dict(marker='o', markerfacecolor='red', markersize=8, markeredgecolor='none')
axs[1, 1].boxplot(data, labels=labels, flierprops=flierprops)
axs[1, 1].set_title('Custom Outliers')
plt.show()
总结
箱线图是可视化数据集分布的好方法。Matplotlib 为箱线图提供了许多定制选项,例如移除单个组件以及自定义组件的样式。通过使用这些选项,我们可以创建能够有效传达我们想要表达信息的箱线图。