Нанесите несколько столбцов на линейный график, используя Dash / Plotly - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть таблица, которая выглядит следующим образом ...

ticker,price1y,price2y,price3y,price5y,
aapl,12,23,47,69,
tsla,-9,24,54,190,
att,-10,23,34,35,

Я хотел бы нанести их на график с помощью панд, чтобы показать price1y price2y ... price5y вдоль оси x и% изменения вверх по оси y. мне нужно иметь возможность выбрать несколько значений для добавления на график, используя функцию обратного вызова dash.

В настоящее время я создаю граф dash_core_components, однако я безуспешно готовлю к этому.

app.layout = html.Div([
        html.Div([
                     dcc.Graph(
                        id='bar-graph'

                        )
            ], className='twelve columns')

Спасибо

1 Ответ

0 голосов
/ 23 апреля 2019

Вы можете использовать сгруппированную гистограмму от графика:

Делаем импорт:

import plotly.plotly as py
import plotly.graph_objs as go

Пример кадра данных:

data = {
    'ticker': ['aapl', 'tsla', 'att'],
    'price1y': [12 ,-9 ,-10],
    'price2y': [23 ,24 ,23],
    'price3y': [47 ,54 ,34],
    'price5y': [69 ,190 ,35]
}
df = pd.DataFrame(data).set_index('ticker')

Похоже:

        price1y price2y price3y price5y
ticker              
aapl      12    23        47    69
tsla      -9    24        54    190
att      -10    23        34    35

Затем вы можете перебирать столбцы и , чтобы динамически создавать данные для сгруппированной гистограммы :

res = []
for col in df.columns:
    res.append(
        go.Bar(
            x=df.index.values.tolist(),
            y=df[col].values.tolist(),
            name=col
        )
    )

layout = go.Layout(
    barmode='group'
)

fig = go.Figure(data=res, layout=layout)
py.iplot(fig, filename='grouped-bar')

Это даст:

enter image description here

Для того, чтобы получить это в Dash, вам нужно вернуть вышеуказанное из обратного вызова.

...