如何反转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
相关产品推荐
相关产品推荐

