Я пытаюсь создать пунктирный линейный график временного ряда, который имеет несколько интерактивных выпадающих переменных, вводимых пользователем. В идеале я хотел бы, чтобы каждый из раскрывающихся входов позволял выбирать несколько вариантов.
Хотя я могу успешно создавать раскрывающиеся меню, диаграмма не обновляется, как хотелось бы. Когда я разрешаю раскрывающимся спискам иметь несколько вариантов выбора, я получаю сообщение об ошибке, что массивы имеют разную длину. И когда я ограничиваю раскрывающиеся списки одним выбором, я получаю сообщение об ошибке, что [‘Vendor_Name’] отсутствует в индексе. Так что это могут быть две отдельные проблемы.
График, который не работает:
Фрагмент данных Excel, импортированных в DF
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. Мне удалось создать другие графики с отдельными входными данными, и я прочитал документацию.