Добавить раскрывающееся меню для графического представления древовидной карты

В настоящее время я пытаюсь добавить раскрывающееся меню в свой график древовидной карты

Код, который я использую:

import pandas as pd
import plotly.express as px

fig = px.treemap(df, 
                 path=['RuleName','RuleNumber','ParaInvolved',"CreationP","MAjP"],
                 color='Somme',
                 hover_data=["RuleDecision","RuleMAJ"],
                 color_continuous_scale='RdBu')
    
fig.show()

Проблема, с которой я столкнулся, заключается в том, что в моем столбце RuleName у меня есть 151 различное значение (но всего 1300 строк), поэтому я пытаюсь добавить кнопку, позволяющую мне выбирать, для какого значения RuleName я хочу построить свою древовидную карту. На данный момент я использую варварский метод, заключающийся в фильтрации моего фрейма данных по каждому значению RuleName, что привело меня к получению 151 другой древовидной карты. Я не нахожу решения ни на этом, ни на каком-либо другом сайте.

Спасибо за вашу помощь


person Nelson    schedule 28.09.2020    source источник
comment
Привет и добро пожаловать на SO. Было бы здорово, если бы вы могли ознакомиться с инструкциями, а затем попытаться создать mcve.   -  person rpanai    schedule 28.09.2020
comment
К вашему сведению: тщательный ответ на вопросы требует времени. Если ваш вопрос решен, поблагодарите вас, приняв решение, которое лучше всего соответствует вашим потребностям. Флажок принять находится под стрелкой вверх / вниз в левом верхнем углу ответа. Новое решение может быть принято, если появится лучшее. Вы также можете проголосовать за качество / полезность ответа, используя стрелку вверх или вниз. Оставьте комментарий, если решение не отвечает на вопрос. Что мне делать, когда кто-то ответит на мой вопрос?. Спасибо   -  person rpanai    schedule 06.10.2020


Ответы (1)


Здесь я в основном использую ту же логику из этого ответа, но я использую px.treemap(...).data[0] для создания следов вместо go.

import plotly.express as px
import plotly.graph_objects as go
df = px.data.tips()

# We have a list for every day
# In your case will be gropuby('RuleName')
# here for every element d
# d[0] is the name(key) and d[1] is the dataframe
dfs = list(df.groupby("day"))

first_title = dfs[0][0]
traces = []
buttons = []
for i,d in enumerate(dfs):
    visible = [False] * len(dfs)
    visible[i] = True
    name = d[0]
    traces.append(
        px.treemap(d[1],
                   path=['day', 'time', 'sex'],
                   values='total_bill').update_traces(visible=True if i==0 else False).data[0]
    )
    buttons.append(dict(label=name,
                        method="update",
                        args=[{"visible":visible},
                              {"title":f"{name}"}]))

updatemenus = [{'active':0, "buttons":buttons}]

fig = go.Figure(data=traces,
                 layout=dict(updatemenus=updatemenus))
fig.update_layout(title=first_title, title_x=0.5)
fig.show()

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

person rpanai    schedule 28.09.2020
comment
Большое спасибо за вашу помощь, это именно то, что я искал! - person Nelson; 29.09.2020