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

如何用Python的Plotly绘制含年度中心标识的多信息定制饼图

数据集
Year      ,    Store_type   ,      MY_SHOPPING         ,TRAN_SPEND
2012,      LARGE_STORE  ,         HEALTH CONSCIOUS  ,    49383.70$
2012  ,   CONVENIENCE_STORE  ,   CONFIDENT COOKS      ,  13150.00$
2013  , LARGER_STORE        ,   QUICK&EASY        ,  98765.00$
2013  , LARGER_STORE      ,    TRADITIONAL        ,  45734.00$
需求

绘制饼图需满足:

  • 图表中心显示年份
  • 以Store_type作为饼块标签
  • 展示MY_SHOPPING的类别名称、对应占比百分比,以及TRAN_SPEND的美元金额
现有代码
fig = px.pie(removed_index_storeformat, values='TRAN_SPEND', names='STORE_TYPE',
             hover_data=['MY_SHOPPING '], labels={'MY_SHOPPING ':'shop'})

fig.update_traces(textposition='inside', textinfo='percent+label')
fig.show()
解决方案

要实现需求,需先处理数据格式,再调整饼图的文本展示和中心标注,以下是完整实现代码:

import plotly.express as px
import pandas as pd

# 加载并处理数据(如果你的数据是从文件读取,替换成pd.read_csv即可)
data = pd.DataFrame({
    'Year': [2012, 2012, 2013, 2013],
    'Store_type': ['LARGE_STORE', 'CONVENIENCE_STORE', 'LARGER_STORE', 'LARGER_STORE'],
    'MY_SHOPPING': ['HEALTH CONSCIOUS', 'CONFIDENT COOKS', 'QUICK&EASY', 'TRADITIONAL'],
    'TRAN_SPEND': ['49383.70$', '13150.00$', '98765.00$', '45734.00$']
})

# 清理消费金额列,去除$符号并转为数值类型,确保占比计算准确
data['TRAN_SPEND'] = data['TRAN_SPEND'].str.replace('$', '', regex=False).astype(float)

# 按年份分组生成饼图,每个年份对应一个独立饼图
for year in data['Year'].unique():
    year_subset = data[data['Year'] == year]
    
    fig = px.pie(
        year_subset,
        values='TRAN_SPEND',
        names='Store_type',
        hover_data=['MY_SHOPPING', 'TRAN_SPEND'],
        labels={'MY_SHOPPING': '购物类别', 'TRAN_SPEND': '消费金额($)'}
    )
    
    # 设置饼块内部文本:百分比 + 门店类型
    fig.update_traces(
        textposition='inside',
        textinfo='percent+label',
        # 自定义悬浮提示框,展示所有需要的信息
        hovertemplate='购物类别: %{customdata[0]}<br>消费金额: $%{customdata[1]:,.2f}<br>占比: %{percent}'
    )
    
    # 在饼图中心添加年份文本
    fig.add_annotation(
        text=str(year),
        x=0.5, y=0.5,
        font_size=30,
        showarrow=False
    )
    
    fig.update_layout(title=f"年份 {year} 消费分布")
    fig.show()

关键调整说明:

  1. 数据清洗:移除TRAN_SPEND的美元符号并转为数值,保证占比计算正确
  2. 年份分组:按年份拆分数据,生成对应饼图,中心标注当前年份
  3. 文本定制:通过textinfo设置内部显示百分比和门店类型;用hovertemplate自定义悬浮内容,展示购物类别、具体消费金额和占比
  4. 中心标注:用add_annotation在饼图中心添加大字号年份文本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:55:20