Как правильно использовать percentParent в графах солнечных лучей только с 1 центральным узлом?

Итак, я пытаюсь построить график солнечных лучей Plotly, который отображает percentParent для каждого элемента на графике. Это отлично работает для всех элементов, за исключением случаев, когда у меня есть только один вариант для центрального узла/кольца/что угодно (см. пример ниже)

введите здесь описание изображения

Поскольку центральный узел, очевидно, не имеет родителя, он, кажется, выдает ошибку и отображает заключенный в квадратные скобки вызов percentParent из поля texttemplate. Однако, если есть 2 (или более) центральных узла, он автоматически вычисляет процент каждого из них.

Мой вопрос: когда у меня есть только 1 центральный узел, как я могу либо скрыть это поле только для центрального узла, либо заставить его правильно отображать 100%?

Пример кода:

import pandas as pd
import plotly.graph_objects as go

df = pd.DataFrame({'node_names': ['Center', 'Yes', 'No'],
                   'node_parent': ['', 'Center', 'Center'],
                   'node_labels': ['Center', 'Center_Yes', 'Center_No'],
                   'node_counts': [1000, 701, 299]})


fig = go.Figure(
       data=go.Sunburst(
        ids=df["node_names"],
        labels=df["node_labels"], 
        parents=df["node_parent"],
        values=df["node_counts"],
        branchvalues="total",
        texttemplate = ('%{label}<br>%{percentParent:.1%}'),
    ),
)

fig.show()

person magnawhale    schedule 20.07.2020    source источник
comment
Не могли бы вы предоставить полный mcve?   -  person rpanai    schedule 20.07.2020
comment
@rpanai: обновленный пост с кодом mcve   -  person magnawhale    schedule 21.07.2020
comment
Я тоже видел ваш вопрос в community.plotly. Мне кажется, что здесь возможная ошибка или они должны добавить условный шаблон.   -  person rpanai    schedule 21.07.2020


Ответы (1)


Вот нашел возможный способ почитав справку go.Sunburst.texttemplate?

import pandas as pd
import plotly.graph_objects as go

df = pd.DataFrame({'node_names': ['Center', 'Yes', 'No'],
                   'node_parent': ['', 'Center', 'Center'],
                   'node_labels': ['Center', 'Center_Yes', 'Center_No'],
                   'node_counts': [1000, 701, 299]})

fig=go.Figure(
    data=go.Sunburst(
        ids=df["node_names"],
        labels=df["node_labels"], 
        parents=df["node_parent"],
        values=df["node_counts"],
        branchvalues="total",
        texttemplate = ('%{label}',
                        '%{label}<br>%{percentParent:.1%}',
                        '%{label}<br>%{percentParent:.1%}',
                        '%{label}<br>%{percentParent:.1%}'),
    ),
)

fig.show()

введите здесь описание изображения

В конечном итоге вы можете изменить первый элемент в texttemplate как '%{label}<br>100%'.

person rpanai    schedule 21.07.2020
comment
Интересно, я не догадался передать массив в texttemplate. Спасибо! - person magnawhale; 23.07.2020