自定义小提琴图可视化

PythonPythonBeginner
立即练习

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

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

简介

在本实验中,我们将学习如何使用 Matplotlib 自定义小提琴图。小提琴图是用于可视化数据分布和密度的强大工具。通过自定义图表的外观,我们可以创建更具信息性和视觉吸引力的可视化效果。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。

创建测试数据

首先,我们将创建一些用于小提琴图的测试数据。我们将使用 NumPy 生成四个包含 100 个正态分布值的数组,其标准差逐渐增加。

import matplotlib.pyplot as plt
import numpy as np

## 创建测试数据
np.random.seed(19680801)
data = [sorted(np.random.normal(0, std, 100)) for std in range(1, 5)]

创建默认小提琴图

接下来,我们将使用 Matplotlib 的violinplot函数创建一个默认的小提琴图。这将为我们在后续步骤中自定义图表时提供一个比较的基准。

## 创建默认小提琴图
fig, ax1 = plt.subplots()
ax1.set_title('Default Violin Plot')
ax1.set_ylabel('Observed Values')
ax1.violinplot(data)

自定义小提琴图外观

现在我们将自定义小提琴图的外观。首先,我们通过将showmeansshowmediansshowextrema参数设置为False来限制 Matplotlib 绘制的内容。然后,我们使用set_facecolorset_alpha方法更改小提琴主体的颜色和透明度。最后,我们在小提琴图上方添加一个简化的箱线图表示,使用 NumPy 的percentile函数来计算四分位数、中位数和须线。

## 自定义小提琴图外观
fig, ax2 = plt.subplots()
ax2.set_title('Customized Violin Plot')
ax2.set_ylabel('Observed Values')

## 创建小提琴图
parts = ax2.violinplot(
        data, showmeans=False, showmedians=False,
        showextrema=False)

## 自定义小提琴主体
for pc in parts['bodies']:
    pc.set_facecolor('#D43F3A')
    pc.set_edgecolor('black')
    pc.set_alpha(1)

## 添加箱线图
quartile1, medians, quartile3 = np.percentile(data, [25, 50, 75], axis=1)
whiskers = np.array([
    adjacent_values(sorted_array, q1, q3)
    for sorted_array, q1, q3 in zip(data, quartile1, quartile3)])
whiskers_min, whiskers_max = whiskers[:, 0], whiskers[:, 1]

inds = np.arange(1, len(medians) + 1)
ax2.scatter(inds, medians, marker='o', color='white', s=30, zorder=3)
ax2.vlines(inds, quartile1, quartile3, color='k', linestyle='-', lw=5)
ax2.vlines(inds, whiskers_min, whiskers_max, color='k', linestyle='-', lw=1)

设置坐标轴样式

最后,我们将通过指定刻度标签和限制来设置 x 轴的样式。我们将定义一个辅助函数set_axis_style来完成此操作。

## 设置坐标轴样式
labels = ['A', 'B', 'C', 'D']
set_axis_style(ax2, labels)

def set_axis_style(ax, labels):
    ax.set_xticks(np.arange(1, len(labels) + 1))
    ax.set_xticklabels(labels)
    ax.set_xlim(0.25, len(labels) + 0.75)
    ax.set_xlabel('Sample Name')

总结

在本实验中,我们学习了如何使用 Matplotlib 自定义小提琴图的外观。我们创建了一个默认的小提琴图,然后通过更改小提琴主体的颜色和透明度,并在其上方添加简化的箱线图表示来对其进行修改。我们还设置了 x 轴刻度标签和限制的样式。通过自定义图表的外观,我们可以创建更具信息性和视觉吸引力的可视化效果。