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

如何在Plotly Treemap中使用ids处理含重复名称的层级数据

Plotly Treemap 处理含重复名称的层级数据集问题

你想用Plotly的treemap组件结合ids参数正确渲染包含重复名称的层级数据集,基础示例代码如下:

import plotly.express as px
fig = px.treemap(
    parents = ["",    "Anna","Anna", "Bert",  "Bert", "Belen", "Belen",  "Belen", "Cristiano"],
    names =   ["Anna","Bert","Belen","Charlie","Chris","Carlos","Camila","Cristiano", "Diego"],
)
fig.update_traces(root_color="lightgrey")
fig.show()

但遇到两个核心问题:

问题1:重复名称导致图表空白

当存在重复名称(如Carlos同时属于Belen和Bert分支)时,直接用名称关联会产生歧义,导致图表空白。你尝试用Postgres的ltree路径作为ids参数,数据集teams.csv内容如下:

ltree,name,parent
,Anna,
Bert,Bert,Anna
Belen,Belen,Anna
Bert-Carlos,Carlos,Bert
Bert-Chris,Chris,Bert
Belen-Carlos,Carlos,Belen
Belen-Camila,Camila,Belen
Belen-Cristiano,Cristiano,Belen
Belen-Cristiano-Diego,Diego,Cristiano

使用以下代码渲染时图表为空白:

import plotly.express as px
import pandas as pd

df = pd.read_csv("teams.csv")
df = df.fillna('')
fig = px.treemap(df,
    parents=df.parent,
    names=df.name,
    ids=df.ltree,
    # path=[px.Constant('Anna'),'parent', 'name']
)
fig.show()

问题2:删除部分行后渲染不完整

删除数据集最后一行(Diego的记录)后,图表可渲染但结构不完整。尝试修改ltree路径格式、移除根节点等操作后,层级结构仍错误,不清楚ids参数的使用问题及ltree路径的正确格式。


解决方案:正确关联ids与parents

问题核心是**parents参数必须对应父节点的ids值,而非父节点的name**。你的数据集中parent列存的是父节点名称,但ids用的是ltree路径,两者无法匹配,导致Plotly无法构建树形结构。

步骤1:修正数据集的parent列

将parent列的值替换为对应父节点的ids(即ltree路径),同时保证每个节点的ltree路径唯一且符合层级逻辑。修正后的teams.csv如下:

ltree,name,parent
Anna,Anna,
Anna-Bert,Bert,Anna
Anna-Belen,Belen,Anna
Anna-Bert-Carlos,Carlos,Anna-Bert
Anna-Bert-Chris,Chris,Anna-Bert
Anna-Belen-Carlos,Carlos,Anna-Belen
Anna-Belen-Camila,Camila,Anna-Belen
Anna-Belen-Cristiano,Cristiano,Anna-Belen
Anna-Belen-Cristiano-Diego,Diego,Anna-Belen-Cristiano

步骤2:使用修正后的数据集渲染

修改代码如下:

import plotly.express as px
import pandas as pd

df = pd.read_csv("teams.csv")
df = df.fillna('')
fig = px.treemap(
    df,
    parents=df.parent,
    names=df.name,
    ids=df.ltree
)
fig.update_traces(root_color="lightgrey")
fig.show()

关键注意事项

  • ids必须是每个节点的唯一标识,不能重复。
  • parents的值必须严格对应父节点的ids,而非名称,这样才能避免重复名称带来的歧义,让Plotly准确识别层级关系。
  • ltree路径建议采用父节点路径+当前节点名称的格式(如Anna-Belen-Cristiano),既保证唯一性,又能直观体现层级结构,便于维护。

内容的提问来源于stack exchange,提问作者Domenico Spidy Tamburro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:22:27