Add Update Menus to Plotly Figure without getting TypeError

hi @Ehard
to solve this issue you need to modify the args of the buttons. Instead of assigning a complete dataframe, you need to assign the columns that pertain to the values and names attribute of a pie chart.

optbuttons = [
    {'label': "Top 10", 'method': 'update', 'args': [{'values': [top10lossstates['loss']], 'names': [top10lossstates['state']]},{'title': 'Top 10 States'}]},
    {'label': "Top 5", 'method': 'update', 'args': [{'values': [top5lossstates['loss']], 'names': [top5lossstates['state']]},{'title': 'Top 5 States'}]},
    {'label': "Bottom 10", 'method': 'update', 'args': [{'values': [bot10lossstates['loss']], 'names': [bot10lossstates['state']]},{'title': 'Bottom 10 States'}]}
]

This complete code should work:

import plotly.express as px
import pandas as pd


df = pd.read_csv("statedatahalfed.csv")

top10lossstates = df.sort_values('loss',ascending = False)[:10]
top5lossstates = df.sort_values('loss',ascending = False)[:5]
bot10lossstates = df.sort_values('loss',ascending = True)[:10]

optbuttons = [
    {'label': "Top 10", 'method': 'update', 'args': [{'values': [top10lossstates['loss']], 'names': [top10lossstates['state']]},{'title': 'Top 10 States'}]},
    {'label': "Top 5", 'method': 'update', 'args': [{'values': [top5lossstates['loss']], 'names': [top5lossstates['state']]},{'title': 'Top 5 States'}]},
    {'label': "Bottom 10", 'method': 'update', 'args': [{'values': [bot10lossstates['loss']], 'names': [bot10lossstates['state']]},{'title': 'Bottom 10 States'}]}
]

piechart = px.pie(df,values = 'loss',names = 'state')

piechart.update_layout(
updatemenus=[
        dict(
            type = "buttons",
            direction = "down",
            buttons=optbuttons,
            x=0.8,
            xanchor="left",
            y=0.8,
            yanchor="top"
        ),
    ]
)

piechart.show()
1 Like