自定义箱线图

PythonPythonBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本教程中,我们将学习如何在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来移除均值。我们还可以分别通过将showboxshowcaps设置为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来更改箱体的颜色和线条样式。我们还可以分别通过设置medianpropsmeanpropsmeanlineprops来更改中位数、均值和均值线的样式。

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为箱线图提供了许多定制选项,例如移除单个组件以及自定义组件的样式。通过使用这些选项,我们可以创建能够有效传达我们想要表达信息的箱线图。