Plotly旭日图添加与父类数值成比例的平行子节点方法咨询
Plotly 旭日图单父类多子节点实现方案
实现思路
原始数据为宽格式,people_vaccinated、people_fully_vaccinated两个接种指标以列维度存储,无法直接作为国家层级的子节点。将宽表转为长格式后,构造「大洲→国家→接种指标」三级层级路径即可实现需求,无需手动配置names、parents参数。
完整实现代码
import pandas as pd import plotly.express as px # 原始数据集 df = pd.DataFrame({'continent':['SA','SA','NA','NA'], 'country':['Brazil','Uruguay','USA','Canada'], 'total_vaccinations':[100,80,400,200], 'people_vaccinated':[40,20,100,80], 'people_fully_vaccinated':[8,4,11,11]}) # 宽表转长表,将两个接种指标转为行数据 df_long = df.melt( id_vars=['continent', 'country', 'total_vaccinations'], value_vars=['people_vaccinated', 'people_fully_vaccinated'], var_name='vaccine_type', value_name='count' ) # 数值校准(可选):使国家层级尺寸严格对应total_vaccinations数值 df_long['count'] = df_long['count'] * df_long['total_vaccinations'] / df_long.groupby('country')['count'].transform('sum') # 绘制三级旭日图 fig = px.sunburst( df_long, path=['continent', 'country', 'vaccine_type'], values='count', hover_data={'total_vaccinations': True} ) # 自定义标签显示效果 fig.update_traces(textinfo='label+percent parent') fig.show()
效果说明
- 最外层节点为两个接种指标,尺寸和自身数值成正比
- 国家层级尺寸默认是其下所有子节点的数值之和,增加校准步骤后可严格匹配
total_vaccinations的基准值 - 可通过
hover_data自定义悬停时显示的字段,方便查看各级指标的具体数值
内容的提问来源于stack exchange,提问作者callmeanythingyouwant
相关产品推荐
相关产品推荐

