Множественные линейные диаграммы с использованием Da sh, Plotly и Python - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь построить более одной строки, когда пользователь выбирает больше элементов в раскрывающемся списке, но это не очень хорошо, я не могу понять, что я делаю не так. Я думаю, что возникают проблемы, когда я добавляю данные для построения рисунка. Если я рисую только одну акцию, диаграмма работает хорошо, но когда я добавляю еще одну акцию, она терпит неудачу.

введите описание изображения здесь

Кто-нибудь может мне помочь?

import dash
import dash_html_components as html
import dash_core_components as dcc
import plotly.graph_objects as go
import pandas as pd
from dash.dependencies import Input, Output
import yfinance as yf
import pandas as pd

# Initialize the app
app = dash.Dash(__name__)
#app.config.suppress_callback_exceptions = True

app.layout = html.Div(
    children=[
        html.Div(className='row',
                 children=[
                    html.Div(className='four columns div-user-controls',
                             children=[
                                 html.H2('DASH - STOCK PRICES'),
                                 html.P('Visualising time series with Plotly - Dash.'),
                                 html.P('Pick one or more stocks from the dropdown below.'),
                                 html.Div(
                                     className='div-for-dropdown',
                                     children=[
                                         dcc.Dropdown(id='stockselector', options=[{'label': 'AAPL', 'value': 'AAPL'},
                                                                                   {'label': 'MSFT', 'value': 'MSFT'},
                                                                                   {'label': 'MELI', 'value': 'MELI'}],
                                                      multi=True, value='',
                                                      style={'backgroundColor': '#1E1E1E'},
                                                      className='stockselector'
                                                      ),
                                     ],
                                     style={'color': '#1E1E1E'})
                                ]
                             ),
                    html.Div(className='eight columns div-for-charts bg-grey',
                             children=[
                                 dcc.Graph(id='timeseries', config={'displayModeBar': False}, animate=False)
                             ])
                              ])
        ]

)


# Callback for timeseries price
@app.callback(Output('timeseries', 'figure'),
              [Input('stockselector', 'value')])

def update_graph(input_data):
    global trace1
    #df.drop(df.index, inplace=True)
    df = yf.download(input_data, start="2019-01-01", end="2019-04-30")['Adj Close']
    #df = pd.DataFrame()

    trace1 = []
    #for stock in input_data:
    trace = go.Scatter(x=df.index.tolist(),
                         y=df.values.tolist(),
                         mode='lines',
                         opacity=0.7,
                         name='asd',
                         textposition='bottom center')
    trace1.append(trace)
    #traces = [trace1]
    #data = [val for sublist in traces for val in sublist]
    figure = {'data': trace1,
              'layout': go.Layout(
                  colorway=["#5E0DAC", '#FF4F00', '#375CB1', '#FF7400', '#FFF400', '#FF0056'],
                  template='plotly_dark',
                  paper_bgcolor='rgba(0, 0, 0, 0)',
                  plot_bgcolor='rgba(0, 0, 0, 0)',
                  title={'text': 'Stock Prices', 'font': {'color': 'white'}, 'x': 0.5},
              ),

              }
    df.drop(df.index, inplace=True)
    return figure


if __name__ == '__main__':
    app.run_server(debug=False)´


...