Накратко
Мисля, че въпросът ми има две части:
- В какъв формат
plotly
очаква да бъде аргументътids
? - Как мога да създам
ids
, което ми позволява да създам дървовидна карта с дублиран етикет?
В повече детайли
Опитвам се да имам вложена дървовидна карта със споделен етикет. Например, мислете за това като за категория Други.
Тук използвам Python 3.8 Plotly 4.9.0
Повторно използване на plotly
пример:
from plotly import graph_objects as go
labels = ["A1", "A2", "A3", "A4", "A5", "B1", "B2", "Other", "Other"]
parents = ["", "A1", "A2", "A3", "A4", "", "B1", "A1", "B1"]
ids = [f"{parents[i]}{'-' if parents[i] else ''}{labels[i]}" for i in range(0,len(labels))]
# ['A1', 'A1-A2', 'A2-A3', 'A3-A4', 'A4-A5', 'B1', 'B1-B2', 'A1-Other', 'B1-Other']
fig = go.Figure(go.Treemap(
labels = labels,
parents = parents,
ids=ids # commenting this out displays something at least
))
fig.show()
Горното ми дава празен екран, но ако коментирам аргумента ids
, той игнорира един от дублираните етикети:
Разгледах различни части от документацията на plotly
и изглежда, че този списък от низове трябва да работи по предназначение.
Извлечение от https://plotly.com/python/reference/treemap/:
ids
Тип: списък, масив numpy или Pandas серия от числа, низове или дати и часове.Присвоява идентификатори на всяка дата. Тези идентификатори за постоянство на обект на точки от данни по време на анимация. Трябва да бъде масив от низове, а не числа или друг тип.
Причината да опитам тази специфична структура на ids
се дължи на други plotly
примери
напр. https://plotly.com/python/treemaps/#controlling-text-fontsize-with-uniformtext
import plotly.graph_objects as go
import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/718417069ead87650b90472464c7565dc8c2cb1c/sunburst-coffee-flavors-complete.csv')
fig = go.Figure(go.Treemap(
ids = df.ids,
labels = df.labels,
parents = df.parents))
fig.update_layout(uniformtext=dict(minsize=10, mode='hide'))
fig.show()
# Above is exact example, below is df structure
df.head()
ids labels parents
0 Aromas Aromas NaN
1 Tastes Tastes NaN
2 Aromas-Enzymatic Enzymatic Aromas
3 Aromas-Sugar Browning Sugar Browning Aromas
4 Aromas-Dry Distillation Dry Distillation Aromas
Благодаря за отделеното време !