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

