Сюжетно: Показывать hoverinfo в карте дерева только для дочерних узлов

#python #plotly #data-visualization #treemap #plotly-python

Вопрос:

 import pandas as pd
import plotly.express as px

df = pd.DataFrame({'world':['world']*4,
                   'continent':['SA','SA','NA','NA'],
                  'country':['Brazil','Uruguay','USA','Canada'],
                  'total_cases_per_100':[6,1,12,8]})

fig = px.treemap(df, path=['world','continent','country'],values='total_cases_per_100')
fig.update_traces(hovertemplate=None, hoverinfo='value')
 

Приведенный выше код дает следующий вывод-

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

Как видно, он правильно отображает значение total_cases_per_100 для USA и всех других дочерних узлов. Но для родительских узлов он суммирует это, что неверно, так как total_cases_per_100 это соотношение, а не итог.

Есть ли в любом случае возможность скрыть value hoverinfo для всех узлов, кроме дочерних?

В случае, если это невозможно, фактическое значение для родительских узлов также доступно для меня, но я не уверен, как я мог бы заменить им сгенерированное значение.

Ответ №1:

Вы можете использовать hover_data / customdata и переопределять значения для конечных узлов none.

 import pandas as pd
import plotly.express as px


df = pd.DataFrame({'world':['world']*4,
                   'continent':['SA','SA','NA','NA'],
                  'country':['Brazil','Uruguay','USA','Canada'],
                  'total_cases_per_100':[6,1,12,8]})
leaves = df.select_dtypes("object").apply("/".join, axis=1).values


fig = px.treemap(df, path=['world','continent','country'],values='total_cases_per_100', hover_data=["total_cases_per_100"])
fig.update_traces(hovertemplate='%{customdata[0]}')
fig.data[0].customdata = [
    v if fig.data[0].ids[i]
    in leaves else [""]
    for i, v in enumerate(fig.data[0].customdata)
]
fig
 

Комментарии:

1. Возможность манипулировать ids таким образом открывает множество возможностей настройки, спасибо! Я не думаю, что был бы способ скрыть эту маленькую стрелку наведения на родительских узлах?

2. Я все равно не смог найти, чтобы предотвратить появление окна наведения. Однако мне очень понравилась визуальная очередь туда, где находится фокус наведения ….

3. Он также выделяет узел, который привлекает к нему внимание. Но в любом случае, я спрашивал только из любопытства. В любом случае я заменяю его другими значениями.