简介
在本实验中,我们将学习如何使用水平堆叠条形图来可视化离散分布。我们将使用 Matplotlib(Python 中一个流行的绘图库)来创建一个调查结果可视化。
虚拟机提示
虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。
有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。
导入库
首先,我们将导入必要的库。在本实验中,我们将使用 Matplotlib 和 Numpy。
import matplotlib.pyplot as plt
import numpy as np
准备数据
我们需要定义类别和调查结果。在这个例子中,我们有一项调查,人们在一个五级量表上对问题的同意程度进行评分。我们将把类别定义为 category_names,把调查结果定义为 results。
category_names = ['Strongly disagree', 'Disagree',
'Neither agree nor disagree', 'Agree', 'Strongly agree']
results = {
'Question 1': [10, 15, 17, 32, 26],
'Question 2': [26, 22, 29, 10, 13],
'Question 3': [35, 37, 7, 2, 19],
'Question 4': [32, 11, 9, 15, 33],
'Question 5': [21, 29, 5, 5, 40],
'Question 6': [8, 19, 5, 30, 38]
}
定义函数
现在,我们将定义一个名为 survey 的函数,它接受 results 和 category_names 作为参数,并创建一个水平堆叠条形图可视化。
def survey(results, category_names):
"""
参数
----------
results : dict
从问题标签到每个类别的答案列表的映射。
假设所有列表包含相同数量的条目,并且与 *category_names* 的长度匹配。
category_names : list of str
类别标签。
"""
## 将结果和类别转换为 numpy 数组
labels = list(results.keys())
data = np.array(list(results.values()))
## 计算数据的累积和以进行水平堆叠
data_cum = data.cumsum(axis=1)
## 定义类别颜色
category_colors = plt.colormaps['RdYlGn'](
np.linspace(0.15, 0.85, data.shape[1]))
## 创建绘图并设置轴属性
fig, ax = plt.subplots(figsize=(9.2, 5))
ax.invert_yaxis()
ax.xaxis.set_visible(False)
ax.set_xlim(0, np.sum(data, axis=1).max())
## 创建堆叠条形图并添加条形标签
for i, (colname, color) in enumerate(zip(category_names, category_colors)):
widths = data[:, i]
starts = data_cum[:, i] - widths
rects = ax.barh(labels, widths, left=starts, height=0.5,
label=colname, color=color)
r, g, b, _ = color
text_color = 'white' if r * g * b < 0.5 else 'darkgrey'
ax.bar_label(rects, label_type='center', color=text_color)
## 添加图例
ax.legend(ncols=len(category_names), bbox_to_anchor=(0, 1),
loc='lower left', fontsize='small')
return fig, ax
调用函数并显示结果
最后,我们将以 results 和 category_names 作为输入调用 survey 函数,并显示生成的可视化结果。
survey(results, category_names)
plt.show()
总结
在本实验中,我们学习了如何使用 Matplotlib 创建水平堆叠条形图来可视化离散分布。我们定义了类别和调查结果,创建了一个函数来生成图表,并展示了结果。这种技术对于可视化调查结果或其他类型的离散分布可能很有用。