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

如何反转Plotly旭日图的根节点与叶子节点层级顺序?

解决Plotly旭日图反转层级(宽泛分类在外环)的问题

直接反转path列表会导致外环分类被分割成多个独立部分,无法形成完整的环——原因是Plotly Express的sunburst默认按path从内到外的顺序解析层级,子分类会直接映射到父分类的对应片段。以下是两种可行的实现方法:

方法一:调整数据结构配合Plotly Express

通过添加父分类的汇总行,并设置branchvalues='total',让父分类作为完整的外环,子分类嵌套在内层:

import pandas as pd
import plotly
import plotly.express as px

# 调整数据:添加父分类的汇总行(Hierarchy 2设为None)
df = pd.DataFrame(data = {
    'Hierarchy 1': ['Dark', 'Dark', 'Dark', 'Bright', 'Dark', 'Bright'],
    'Hierarchy 2': ['Grey', 'Black', 'Blue', 'Bright', None, None],
    'values': [1, 2, 3, 4, 6, 4]  # Dark的总和为1+2+3=6,Bright总和为4
})

# path顺序为[子分类, 父分类],branchvalues='total'确保父节点值等于子节点总和
fig = px.sunburst(df, path=['Hierarchy 2', 'Hierarchy 1'], values='values', branchvalues='total')
plotly.offline.plot(fig)

方法二:使用Plotly Graph Objects手动构建层级

这种方法无需修改原始数据,通过手动定义ids、parents和values来精确控制层级关系,让宽泛分类作为外层父节点:

import pandas as pd
import plotly
import plotly.graph_objects as go

# 手动定义层级结构
ids = ['Dark', 'Bright', 'Dark-Grey', 'Dark-Black', 'Dark-Blue', 'Bright-Bright']
labels = ['Dark', 'Bright', 'Grey', 'Black', 'Blue', 'Bright']
parents = ['', '', 'Dark', 'Dark', 'Dark', 'Bright']  # 空字符串表示最外层节点
values = [6, 4, 1, 2, 3, 4]  # 父节点值为对应子节点总和

fig = go.Figure(go.Sunburst(
    ids=ids,
    labels=labels,
    parents=parents,
    values=values,
    branchvalues='total'
))

fig.update_layout(margin=dict(t=0, l=0, r=0, b=0))
plotly.offline.plot(fig)

两种方法都能实现最宽泛的分类(Hierarchy 1)处于外环,子分类(Hierarchy 2)处于内环的效果,方法二更适合复杂层级的自定义需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 17:06:56