饼图:直观展示数据占比的利器

什么是饼图?

饼图(Pie Chart)是一种将整体划分为多个部分的圆形统计图表,每个扇区的弧长(面积)代表该部分占整体的比例。它能直观展示部分与整体的关系,适用于展示分类数据的占比情况,如市场份额、预算分配、人口构成等。

饼图的核心要素
  1. 扇区:每个扇形代表一个类别
  2. 百分比标签:显示各类别的精确占比
  3. 图例:说明各类别对应的颜色
  4. 强调区块:可突出显示关键数据(如最大/最小部分)

Python实现饼图的两种方式(附代码示例)

示例1:基础饼图 - 公司部门预算分配
import matplotlib.pyplot as plt

# 数据准备
departments = ['研发', '市场', '行政', '人力资源']
budget = [45, 30, 15, 10]  # 单位:百万元
colors = ['#FF6B6B', '#4ECDC4', '#FFD166', '#6A0572']

# 创建饼图
plt.figure(figsize=(8, 6))
plt.pie(
    budget,
    labels=departments,
    colors=colors,
    autopct='%1.1f%%',  # 显示百分比
    startangle=90,      # 起始角度
    explode=(0.1, 0, 0, 0)  # 突出研发部门
)

# 添加标题
plt.title('2023年部门预算分配', fontsize=14)
plt.axis('equal')  # 保证圆形
plt.tight_layout()
plt.savefig('budget_pie.png', dpi=300)
plt.show()
示例2:多层饼图 - 电商平台品类销售分析
import pandas as pd
import matplotlib.pyplot as plt

# 创建示例数据
data = {
    '一级品类': ['电子', '服装', '家居'],
    '销售额': [500, 300, 200],
    '二级品类': [
        ['手机', '电脑', '相机'],
        ['男装', '女装', '童装'],
        ['家具', '厨具', '装饰']
    ],
    '二级销售额': [
        [300, 150, 50],
        [120, 100, 80],
        [80, 70, 50]
    ]
}

# 创建画布
fig, ax = plt.subplots(figsize=(10, 8))

# 外层饼图(一级品类)
wedges_outer, _ = ax.pie(
    data['销售额'],
    radius=1,
    labels=data['一级品类'],
    colors=['#FF9AA2', '#FFB7B2', '#FFDAC1'],
    wedgeprops=dict(width=0.3, edgecolor='w')
)

# 内层饼图(二级品类)
for i, (category, sales) in enumerate(zip(data['二级品类'], data['二级销售额'])):
    ax.pie(
        sales,
        radius=0.7,
        labels=category,
        labeldistance=0.7,
        colors=plt.cm.Pastel1(range(len(sales))),
        wedgeprops=dict(width=0.3, edgecolor='w')
    )

# 添加中心空白圆
centre_circle = plt.Circle((0,0), 0.4, color='white')
ax.add_patch(centre_circle)

# 添加标题
plt.title('电商平台品类销售结构', fontsize=14)
plt.axis('equal')
plt.tight_layout()
plt.savefig('nested_pie.png', dpi=300)
plt.show()
示例3:动态交互饼图(Plotly)
import plotly.express as px

# 数据准备
data = px.data.gapminder().query("year == 2007")
continent_data = data.groupby('continent')['pop'].sum().reset_index()

# 创建交互式饼图
fig = px.pie(
    continent_data,
    values='pop',
    names='continent',
    title='2007年全球人口分布',
    hole=0.3,  # 环形图
    color_discrete_sequence=px.colors.qualitative.Pastel
)

# 添加悬浮信息
fig.update_traces(
    textposition='inside',
    textinfo='percent+label',
    hovertemplate="<b>%{label}</b><br>占比: %{percent}</br>人口: %{value}"
)

fig.show()

饼图使用的最佳实践

  1. 适用场景

    • 展示3-6个类别的占比
    • 突出最大/最小部分
    • 显示简单比例关系
  2. 避免误区

    • 类别不宜超过7个(否则用条形图更合适)
    • 避免比例相近的扇区(<5%差异)
    • 不要用3D饼图(扭曲视觉比例)
  3. 增强可读性技巧

    plt.pie(
        ...,
        autopct=lambda p: f'{p:.1f}%' if p > 5 else '',  # 小数值不显示标签
        pctdistance=0.85,  # 调整标签位置
        textprops={'fontsize': 9, 'color':'black'}  # 文本样式
    )
    
  4. 创新变体

    • 环形图(添加wedgeprops={'width':0.3}
    • 玫瑰图(极坐标条形图)
    • 旭日图(分层级展示)

各场景推荐工具

需求类型推荐库优势
静态基础饼图Matplotlib高度可定制,PDF出版级质量
交互式展示Plotly支持悬浮信息、点击事件
网页嵌入Seaborn简洁API,美观默认样式
动态数据PygalSVG输出,流畅动画效果

通过Python可视化库,饼图从简单的静态图表发展为支持交互、动画的多维数据展示工具,成为数据故事叙述中不可或缺的组成部分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CS创新实验室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值