Можем ли мы иметь несколько панелей разных выпадающих списков в Python?
Недавно я начал использовать dash для визуализации данных, и я анализирую Stock Data с помощью qunadle API, но не могу получить несколько панелей раскрывающегося списка, отображающих параметры каждого набора данных с помощью цикла for, подобного этому
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 quandl
import plotly.graph_objs as go
import auth
api_key = auth.key
def easy_analysis(quandl_datasets):
try:
for dataset in quandl_datasets:
df = quandl.get(dataset,authtoken=api_key)
df = df.reset_index()
app = dash.Dash(__name__)
app.layout = html.Div([
html.H3(dataset),
dcc.Dropdown(
id=dataset,
options=[{'label' : s,'value' : s} for s in df.columns[1:]],
value=['Open'],
multi=True
),
dcc.Graph(id='dataset' + str(dataset))
])
@app.callback(
Output('dataset' + str(dataset),'figure'),
[Input(dataset,'value')]
)
def draw_graph(dataset):
graphs = []
for column in dataset:
graphs.append(go.Scatter(
x=list(df.Date),
y=list(df[column]),
name=str(column),
mode='lines'
))
return {'data' : graphs}
app.run_server(debug=True)
except Exception as e:
print(str(e))
easy_analysis(['NSE/KOTAKNIFTY','NSE/ZENSARTECH','NSE/BSLGOLDETF'])
На выходе, который я ожидал, было несколько панелей со всеми выпадающими опциями один за другим. Но в результате я получил только одну панель из последнего элемента в списке функций easy_analysis()
easy_analysis(['NSE/KOTAKNIFTY','NSE/ZENSARTECH','NSE/BSLGOLDETF']), considered only 'NSE/BSLGOLDETF'
что я должен сделать, чтобы исправить это и получить несколько панелей для каждого набора данных, как указано в списке. Я также проверил руководство пользователя Dash, но не смог получить то, что искал.
Но когда передается только один аргумент только для одного набора данных с циклом for, код работает нормально, и график изменяется в соответствии с параметром, выбранным в раскрывающемся списке.
1 ответ
Код не работает, потому что вы переопределяете приложение Dash на каждой итерации for
петля.
Даже если у вас есть три набора данных, вам нужно определить приложение Dash и его макет только один раз.
Вы можете сделать три запроса к API Quandl и - если возможно - сохранить все в одном панде Dataframe.
Один вопрос заключается в том, хотите ли вы отобразить все выпадающие списки и графики (т.е. раскрывающийся список + график для каждого набора данных Quandl) или только один раскрывающийся список и один график. Я бы предложил начать с первого подхода, потому что это намного проще. В любом случае, для второго подхода вы можете взглянуть на это решение.