如何用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()
关键调整说明:
- 数据清洗:移除
TRAN_SPEND的美元符号并转为数值,保证占比计算正确 - 年份分组:按年份拆分数据,生成对应饼图,中心标注当前年份
- 文本定制:通过
textinfo设置内部显示百分比和门店类型;用hovertemplate自定义悬浮内容,展示购物类别、具体消费金额和占比 - 中心标注:用
add_annotation在饼图中心添加大字号年份文本
内容的提问来源于stack exchange,提问作者Pegah
相关产品推荐
相关产品推荐

