我想通过下拉菜单中的multi = True来按Year进行过滤,并获取输出。
当我依次输入2018、2019、2020或一一输入时,我已经设法获得输出。
如果我选择2018、2019或2019、2018,或其他顺序,则不会显示该图。
产生的错误:KeyError:错误
我错过了什么以及如何正确执行下拉菜单?
我的代码如下。
谢谢
#!/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)