当前位置:首页>python>python数据可视化技巧的100个练习 -- 14. 创建预算分配的甜甜圈图

python数据可视化技巧的100个练习 -- 14. 创建预算分配的甜甜圈图

  • 2026-09-02 16:17:21
python数据可视化技巧的100个练习 -- 14. 创建预算分配的甜甜圈图

重要性★★★★☆

难度★★★☆☆

你是一家小型创业公司的数据分析师。

首席执行官要求你为即将到来的财年创建公司预算分配的视觉表示。

预算分为五个主要类别:营销、研发、运营、人力资源和 IT 基础设施。

你的任务是使用 Python 创建一个甜甜圈图,清晰地显示每个类别的百分比分配。

首席执行官希望能够快速了解预算在这些关键领域的分布。

请编写一个 Python 脚本,完成以下任务:

  • 创建预算分配的样本数据
  • 使用 matplotlib 生成甜甜圈图
  • 在图表中显示每个类别的百分比
  • 使用易于区分的颜色方案
  • 包含图例以便于参考

确保代码高效且有注释。

图表应视觉上吸引人且一目了然。

【数据生成代码示例】

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 脚本创建了一个甜甜圈图,以可视化不同类别的预算分配。

让我们逐步分析代码并详细解释每一部分:

导入必要的库:

  • 导入 matplotlib.pyplot 作为 plt,用于创建图表。

  • 导入 numpy 作为 np,用于数值运算。

数据生成:

  • 创建一个包含预算分配类别的列表。

  • 使用 np.random.randint() 为每个类别生成 1000 到 10000 之间的随机整数,模拟预算金额。

数据处理:

  • 通过求和所有分配金额来计算总预算。

  • 使用列表推导式计算每个类别的百分比。

  • 将百分比四舍五入到小数点后一位,以便清晰显示。

设置图表:

  • 使用 plt.figure(figsize=(10, 8)) 创建一个指定尺寸的新图形。

颜色方案:

  • 使用 plt.cm.Set3 颜色映射来生成颜色方案。

  • np.linspace(0, 1, len(categories)) 在 0 和 1 之间创建均匀间隔的值。

创建甜甜圈图:

  • 使用 plt.pie() 函数创建基本的饼图。

  • 传入我们的预算分配数据、标签(类别)和颜色。

  • autopct 参数设置为一个 lambda 函数,用于格式化百分比显示。

  • startangle=90 将图表旋转,使第一块从顶部开始。

  • pctdistance=0.85 定位百分比标签。

添加中心圆:

  • 使用 plt.Circle() 创建一个白色圆圈,并将其添加到饼图的中心。

  • 这将饼图转换为甜甜圈图。

添加标题和图例:

  • 使用 plt.title() 添加标题。

  • 使用 plt.legend() 创建图例,将其放置在图表外部以便清晰显示。

完成并显示:

  • 使用 plt.axis('equal') 确保图表呈圆形。

  • 使用 plt.tight_layout() 调整布局,防止重叠。

  • 使用 plt.show() 显示最终图表。

这个脚本展示了 Python 数据可视化的几个关键方面:

  • 数据生成和处理

  • 使用 matplotlib 创建图表

  • 自定义图表元素(颜色、标签、图例等)

  • 将饼图转换为甜甜圈图

  • 正确格式化和布局可视化内容

【小知识】

甜甜圈图通常比饼图更受欢迎,因为它们可以利用中心空间显示额外信息,或者简单地减少图表的墨水与数据比例。

在数据分析中,使用 np.random.randint() 生成数据是一种常见做法,用于创建样本数据集或测试可视化技术。

本例中使用的颜色映射(Set3)是 matplotlib 的定性颜色映射之一,专为易于区分且适用于分类数据而设计。

在 plt.pie() 的 autopct 参数中使用的 lambda 函数是自定义图表中数据显示的强大方式。它允许即时格式化显示值。

plt.legend() 中的 bbox_to_anchor 参数是一个多功能工具,用于定位图例。在处理图表内部空间有限的情况时,它特别有用。

尽管甜甜圈图在视觉上很有吸引力,但在准确比较数值方面可能不如条形图有效。当目标是显示组成且类别数量相对较少(通常最多 5-7 个)时,它们是最有用的。

最新文章

随机文章