Plotly-Dash: Rangeslider не генерирует под графиком
Все. Я пытался создать график, используя Dash, и затем поместил ползунок под графиком, чтобы обновить его, но по какой-то причине я не могу заставить его отображаться. Я следую этому примеру для чистого Plotly, и я старался изо всех сил преобразовать его в код Dash, но он, похоже, не работает, только сгенерированный граф без ползунка.
Я старался изо всех сил, чтобы сделать минимальный пример моей работы с кодом слайдера в самом низу:
###### Main imports ######
import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output, State
import pandas as pd
###### Miscl. functions and imports ######
import quandl as qd
api = '1uRGReHyAEgwYbzkPyG3'
qd.ApiConfig.api_key = api
import datetime as dt
###### Main code ######
app = dash.Dash()
app.scripts.config.serve_locally = True
app.layout = html.Div(children=[
html.H1(children='Basic Forecast'),
dcc.Input(id='online_input', value='AMZN', type='text'),
dcc.DatePickerRange(
id='training_range_picker',
min_date_allowed = dt.date(1900, 1, 1),
max_date_allowed = dt.datetime.today(),
## Default example dates
start_date = dt.datetime(2018,3,4),
end_date = dt.datetime(2018,6,20)),
html.Button('Search', id='run_search', n_clicks_timestamp='0'),
html.Div(id='output_graph')
])
@app.callback(
Output(component_id='output_graph', component_property='children'),
[Input(component_id='run_search', component_property='n_clicks_timestamp')],
[State(component_id='online_input', component_property='value'),
State(component_id='training_range_picker', component_property='start_date'),
State(component_id='training_range_picker', component_property='end_date')]
)
def update_value(run, online_input, start_train_date, end_train_date):
if online_input:
## All date stuff
start_date = dt.datetime.strptime(start_train_date, '%Y-%m-%d') #for more options %H:%M:%S.%f
start_date = start_date.strftime('%Y-%m-%d')
end_date = dt.datetime.strptime(end_train_date, '%Y-%m-%d')
end_date = end_date.strftime('%Y-%m-%d')
data = qd.get_table('WIKI/PRICES', qopts={'columns': ['ticker', 'date', 'close']},
ticker=[online_input], date={'gte': str(start_date), 'lte': str(end_date)})
data.reset_index(inplace=True, drop=True)
data.set_index('date', inplace=True)
name = online_input
######## Slider code starting here. ########
steps = []
for i in range(len(data)):
step = dict(
method = 'restyle',
args = ['visible', [False] * len(data)])
step['args'][1][i] = True # Toggle i'th trace to "visible"
steps.append(step)
return dcc.Graph(
id='time-series_graph',
figure={
'data': [
{'x': data.index, 'y': data.close, 'type': 'line', 'name': name},
],
'layout': {
'title': name, 'sliders' : [dict(
len=50,
steps = steps)]
}
}
)
if __name__ == '__main__':
app.run_server(debug=True)
Куда я здесь не так?