【发布时间】:2019-05-21 11:56:25
【问题描述】:
我正在尝试创建一个具有多个交互式下拉用户输入变量的时间序列 Dash 折线图。理想情况下,我希望每个下拉输入都允许进行多项选择。
虽然我能够成功创建下拉菜单,但图表并没有像我希望的那样更新。当我允许下拉菜单有多个选择时,我收到一个错误,即数组长度不同。当我将下拉菜单限制为一个选项时,我收到一个错误,指出 ['Vendor_Name'] 不在索引中。所以这可能是两个不同的问题。
无效的图表:
导入DF的Excel数据片段
import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import pandas as pd
#import plotly.graph_objs as go
df = pd.read_csv("Data.csv", sep = "\t")
df['YearMonth'] = pd.to_datetime(df['YearMonth'], format = '%Y-%m')
cols = ['Product_1', 'Product_2', 'Product_3']
vendor = df['Vendor'].unique()
app = dash.Dash('Data')
app.layout = html.Div([
html.Div([
html.Div([
html.Label('Product'),
dcc.Dropdown(
id = 'product',
options = [{
'label' : i,
'value' : i
} for i in cols],
multi = True,
value = 'Product_1'
),
]),
html.Div([
html.Label('Vendor'),
dcc.Dropdown(
id = 'vendor',
options = [{
'label' : i,
'value' : i
} for i in vendor],
multi = True,
value = 'ABC')
,
]),
]),
dcc.Graph(id = 'feature-graphic')
])
@app.callback(Output('feature-graphic', 'figure'),
[Input('product', 'value'),
Input('vendor', 'value')])
def update_graph(input_vendor, input_column):
df_filtered = df[df['Vendor'] == input_vendor]
##also tried setting an index because of the error I was getting. Not sure if necessary
df_filtered = df_filtered.set_index(['Vendor'])
traces = []
df_by_col = df_filtered[[input_column, 'YearMonth']]
traces.append({
'x' :pd.Series(df_by_col['YearMonth']),
'y' : df_by_col[input_column],
'mode' : 'lines',
'type' : 'scatter',
'name' :'XYZ'}
)
fig = {
'data': traces,
'layout': {'title': 'Title of Chart'}
}
return fig
if __name__ == '__main__':
app.run_server(debug=False)
提前感谢您的帮助!对 Python 来说还是个新手,但对 Dash 的功能感到非常兴奋。我已经能够使用单个输入创建其他图表,并且通读了文档。
【问题讨论】: