Я хочу отфильтровать по году с опцией multi = True в выпадающем меню и получить вывод.
Мне удалось получить вывод при вводе в последовательности 2018, 2019, 2020 или по одному. Если я выберу 2018, 2019 или 2019, 2018 или любую другую последовательность, график не появится. Произошла ошибка: KeyError: False
Что я пропустил и как правильно работать с выпадающим меню? Мой код ниже. Спасибо
#!/usr/bin/env python3
import plotly.graph_objs as go
import pandas as pd
import numpy as np
import os, dash
import dash_html_components as html
import dash_core_components as dcc
from dash.dependencies import Input, Output
c = 1,2,3,4,5,6,7,8,9,10,11,12
idx = 2018,2019,2020
df_group = pd.DataFrame(np.random.randint(0,100,size=(3, 12)),
columns=list(c), index=list(idx))
#df_group.index.names = ['Year']
year_options = []
for metai in df_group.index.unique():
year_options.append({'label': str(metai), 'value': metai})
app = dash.Dash()
app.layout = html.Div([
dcc.Graph(id='graph'),
dcc.Dropdown(
id='year-picker', multi=True, options=year_options, value=2019
)
])
@app.callback(
Output('graph', 'figure'),
[Input('year-picker', 'value')])
def update_figure(selected_year):
data = []
#for year in df_group.loc[df_group.index == selected_year].index.unique(): - bad code
for year in selected_year:
#print(year)
trace = go.Scatter(
x=df_group.columns,
y=df_group.loc[year],
mode='markers+lines',
marker = {
'size': 12,
'line': {'width': 2}
},
name=str(year)
)
data.append(trace)
return {
'data': data,
'layout': go.Layout(
title='Per Year, EUR'
)}
if __name__ == '__main__':
app.run_server(debug=True)