pythonplotlytreemap:如何使用id并处理重复的名称

问题描述 投票:0回答:1

如何正确使用

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”下,那么(由于不明确)该数字为空白。为了解决歧义,我将使用键

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

其中第一列是 ltree 类型的路径(来自 Postgres 数据库),我将在绘图树形图方法中将其用作

ids

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:如果我从 csv 数据集中删除最后一行,

df = df.fillna('').head(-1)

然后树形图能够渲染图形,但不完整。

我尝试将 ltree 路径格式更改为

Belen-Cristiano-Diego
Root-Belen-Cristiano-Diego
或(“Anna”而不是“Root”)。

我还尝试了帖子中的解决方案Plotly树状图中的重复数据删除第一行(即根):

df = df.fillna('').tail(-1)
fig = px.treemap(df,
    path=[px.Constant('Anna'),'parent', 'name']
)
fig.show()

它呈现了一个图形,但它是错误的层次结构。

我不知道我对

ids
做错了什么,因为 ltree 路径具有唯一值,或者我应该如何格式化/编辑 ltree 路径。

python plotly treemap
1个回答
0
投票

ids
一样,您可以使用与名称相同的项目,但重复项除外,因为
ids
显然必须是唯一的。在重复项上,您使用不同且唯一的标签。使用路径作为重复项的 id 是非常好的。

实践中:

dup = df['name'].duplicated()
df.loc[~dup, 'ltree'] = df.loc[~dup, 'name']

意味着您找到重复项的位置

dup
,并使用名称作为名称不重复的id。简而言之,这使得列
ltree
几乎在所有位置都等于
name
,并且记录
Belen-Carlos
保持不变。

ltree,name,parent
...
Carlos,Carlos,Bert
Chris,Chris,Bert
Belen-Carlos,Carlos,Belen

最后,渲染图形:

import plotly.express as px

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

关于我的答案的警告:阅读https://plotly.com/python/reference/treemap的文档,我承认我仍然不完全理解

ids
如何工作或应该使用,这个答案确实不完全遵循那里的说明。

© www.soinside.com 2019 - 2024. All rights reserved.