Можем ли мы иметь несколько панелей разных выпадающих списков в 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) или только один раскрывающийся список и один график. Я бы предложил начать с первого подхода, потому что это намного проще. В любом случае, для второго подхода вы можете взглянуть на это решение.

Другие вопросы по тегам