简介
在本实验中,我们将学习如何使用 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)
自定义小提琴图外观
现在我们将自定义小提琴图的外观。首先,我们通过将showmeans、showmedians和showextrema参数设置为False来限制 Matplotlib 绘制的内容。然后,我们使用set_facecolor和set_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 轴刻度标签和限制的样式。通过自定义图表的外观,我们可以创建更具信息性和视觉吸引力的可视化效果。