You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于已有dataframe使用facet_wrap绘制分面饼图

基于DataFrame绘制分面饼图实现方案

你已创建的数据集示例如下:
示例DataFrame截图

分面饼图的核心逻辑是按指定分面字段拆分数据子集,为每个子集单独绘制饼图后按网格排布,以下是两种最常用的落地实现方式:


方法1:Matplotlib + Pandas 静态图实现(最通用,无额外复杂依赖)

前置要求

你的数据集需要包含三类字段:

  • 分面维度列:用来拆分出多个子饼图的分组依据,比如不同区域、不同时间周期
  • 分类列:单个饼图内每个扇区对应的类别名称
  • 数值列:每个扇区对应的量化值,用来计算占比

完整实现代码

import pandas as pd
import matplotlib.pyplot as plt

# --------------------------
# 这里替换成你自己的DataFrame
# df = 你已经创建好的dataframe变量
# --------------------------

# 配置参数,根据自己的需求修改
facet_col = "你的分面列名"  # 比如"地区""月份"
category_col = "你的饼图分类列名"  # 比如"消费类型""渠道"
value_col = "你的数值列名"  # 比如"订单量""金额"
n_cols = 3  # 子图网格每行放几个饼图

# 自动计算子图行数
groups = df[facet_col].unique()
n_groups = len(groups)
n_rows = (n_groups + n_cols - 1) // n_cols

# 创建子图网格
fig, axes = plt.subplots(
    nrows=n_rows, 
    ncols=n_cols, 
    figsize=(5*n_cols, 4*n_rows)
)
# 将axes转为一维数组方便循环
axes = axes.flatten()

# 循环绘制每个分面的饼图
for idx, group_name in enumerate(groups):
    # 筛选当前分面的数据
    sub_df = df[df[facet_col] == group_name]
    # 绘制饼图,autopct控制百分比显示格式
    axes[idx].pie(
        sub_df[value_col],
        labels=sub_df[category_col],
        autopct="%1.1f%%",
        startangle=90
    )
    # 设置子图标题为分面名称
    axes[idx].set_title(f"{facet_col}: {group_name}")

# 隐藏多余的空白子图
for idx in range(n_groups, len(axes)):
    axes[idx].axis("off")

# 自动调整间距避免标签重叠
plt.tight_layout()
plt.show()

方法2:Plotly 交互式分面饼图(代码更简洁,支持交互查看)

如果需要可交互的图表(鼠标悬浮显示详情、缩放、导出等),可以直接用plotly的分面参数,不需要手动写循环:

import plotly.express as px

# 替换成你自己的列名即可
fig = px.pie(
    df,
    values="你的数值列名",
    names="你的饼图分类列名",
    facet_col="你的分面列名",  # 按列分面,也可以用facet_row按行分面
    facet_col_wrap=3  # 每行最多放3个饼图
)
fig.show()

实用优化提示

  • 为了避免不同子饼图中同一类别颜色不一致,可以提前定义分类和颜色的映射字典,在pie()方法中传入colors参数固定配色
  • 如果分类太多不适合在每个饼图旁加标签,可以关闭labels参数,统一在画布外侧加全局共享图例
  • 可以给pie()加wedgeprops={"width":0.6}参数,把普通饼图改成环形图,视觉效果更清爽

内容的提问来源于stack exchange,提问作者trangha2710

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 23:45:45