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()