python数据可视化技巧的100个练习 -- 14. 创建预算分配的甜甜圈图
重要性★★★★☆
难度★★★☆☆
你是一家小型创业公司的数据分析师。
首席执行官要求你为即将到来的财年创建公司预算分配的视觉表示。
预算分为五个主要类别:营销、研发、运营、人力资源和 IT 基础设施。
你的任务是使用 Python 创建一个甜甜圈图,清晰地显示每个类别的百分比分配。
首席执行官希望能够快速了解预算在这些关键领域的分布。
请编写一个 Python 脚本,完成以下任务:
确保代码高效且有注释。
图表应视觉上吸引人且一目了然。
【数据生成代码示例】
import numpy as np# 生成预算分配的样本数据categories = ['Marketing', 'R&D', 'Operations', 'HR', 'IT']budget_allocation = np.random.randint(1000, 10000, size=5)
【图表答案】
【代码答案】
import matplotlib.pyplot as pltimport numpy as np# 生成预算分配的样本数据categories = ['Marketing', 'R&D', 'Operations', 'HR', 'IT']budget_allocation = np.random.randint(1000, 10000, size=5)# 计算百分比total_budget = np.sum(budget_allocation)percentages = [round((x / total_budget) * 100, 1) for x in budget_allocation]# 设置图表plt.figure(figsize=(10, 8))# 创建颜色方案colors = plt.cm.Set3(np.linspace(0, 1, len(categories)))# 创建甜甜圈图center_circle = plt.Circle((0, 0), 0.70, fc='white')plt.pie(budget_allocation, labels=categories, colors=colors, autopct=lambda pct: f'{pct:.1f}%', startangle=90, pctdistance=0.85)plt.gca().add_artist(center_circle)# 添加标题和图例plt.title('Budget Allocation', fontsize=16)plt.legend(categories, title='Categories', loc='center left', bbox_to_anchor=(1, 0, 0.5, 1))# 显示图表plt.axis('equal')plt.tight_layout()plt.show()
这个 Python 脚本创建了一个甜甜圈图,以可视化不同类别的预算分配。
让我们逐步分析代码并详细解释每一部分:
导入必要的库:
数据生成:
数据处理:
通过求和所有分配金额来计算总预算。
使用列表推导式计算每个类别的百分比。
将百分比四舍五入到小数点后一位,以便清晰显示。
设置图表:
颜色方案:
使用 plt.cm.Set3 颜色映射来生成颜色方案。
np.linspace(0, 1, len(categories)) 在 0 和 1 之间创建均匀间隔的值。
创建甜甜圈图:
使用 plt.pie() 函数创建基本的饼图。
传入我们的预算分配数据、标签(类别)和颜色。
autopct 参数设置为一个 lambda 函数,用于格式化百分比显示。
startangle=90 将图表旋转,使第一块从顶部开始。
pctdistance=0.85 定位百分比标签。
添加中心圆:
添加标题和图例:
完成并显示:
这个脚本展示了 Python 数据可视化的几个关键方面:
数据生成和处理
使用 matplotlib 创建图表
自定义图表元素(颜色、标签、图例等)
将饼图转换为甜甜圈图
正确格式化和布局可视化内容
【小知识】
甜甜圈图通常比饼图更受欢迎,因为它们可以利用中心空间显示额外信息,或者简单地减少图表的墨水与数据比例。
在数据分析中,使用 np.random.randint() 生成数据是一种常见做法,用于创建样本数据集或测试可视化技术。
本例中使用的颜色映射(Set3)是 matplotlib 的定性颜色映射之一,专为易于区分且适用于分类数据而设计。
在 plt.pie() 的 autopct 参数中使用的 lambda 函数是自定义图表中数据显示的强大方式。它允许即时格式化显示值。
plt.legend() 中的 bbox_to_anchor 参数是一个多功能工具,用于定位图例。在处理图表内部空间有限的情况时,它特别有用。
尽管甜甜圈图在视觉上很有吸引力,但在准确比较数值方面可能不如条形图有效。当目标是显示组成且类别数量相对较少(通常最多 5-7 个)时,它们是最有用的。