Входные данные в опции MULTI не дают ожидаемого результата в dash python - PullRequest
1 голос
/ 07 ноября 2019

Я хочу отфильтровать по году с опцией 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)
...