Добавить пользовательскую легенду (цвет маркеров) в плотно Python - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь визуализировать торговый алгоритм с помощью сюжета.У меня есть два кадра данных: один с ценами закрытия и другой с транзакциями, которые выполняет мой алгоритм.Зеленые точки должны быть для покупки, красные - для продажи.Я также хочу, чтобы у меня было меню для выбора того, что нужно анализировать.Пока все работает, рисуя действия над ценой закрытия.

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

from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
import plotly.graph_objs as go
import pandas as pd
init_notebook_mode(connected=True)

feed = pd.DataFrame({'AAPL': [100, 120, 130, 120, 150],
                     'MSFT': [80, 70, 90, 100, 99]}, index = pd.date_range('2018-01-01', '2018-01-05'))

trans = pd.DataFrame({'Symbol': ['AAPL', 'AAPL', 'MSFT', 'MSFT'],
                        'Amount': [2, 1, 3, 1],
                        'Action': ['buy', 'sell', 'buy', 'sell'],
                        'Price': [120, 150, 70, 100],
                        'Date': [pd.to_datetime(i) for i in ['2018-01-02', '2018-01-05', '2018-01-02', '2018-01-04']]
                       })

data = []
all_but = dict(label = 'All',
               method = 'update',
                  args = [{'visible': [True] * len(feed.columns.tolist())},
                          {'title': 'all'}
                           ])
buttonlist = [all_but]
for col in feed.columns.tolist():
    stock = go.Scatter(x=feed.index,
                       y=feed.loc[:, col],
                       name=col
                      )
    #actions
    success = trans.loc[trans.Symbol == col]
    actions = go.Scatter(x=success.Date,
                         y=success.Price,
                         name='',
                         mode = 'markers',
                         text = ['Amount ' + str(amount) for amount in success.Amount],
                         hoverinfo = 'text',
                         showlegend=False,
                         marker = dict(
                             size=10,
                             color = ['green' if i == 'buy' else 'red' for i in success.Action]

                         )
                        )
    data.append(stock)
    data.append(actions)
    button = dict(label = col,
                  method = 'update',
                  args = [{'visible': [col == i for i in feed.columns.tolist() for _ in range(2)]},
                          {'title': 'title' + col}
                           ])
    buttonlist.append(button)

updatemenus = list([
    dict(active=-1,
         buttons=buttonlist,
    )
])
layout = dict(title='Feed', showlegend=True,
              updatemenus=updatemenus)

fig = dict(data=data, layout=layout)
iplot(fig)

enter image description here

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

1 Ответ

0 голосов
/ 15 февраля 2019

Ответ на сюжетном форуме с улучшениями кода: https://community.plot.ly/t/add-custom-legend-markers-color-to-plotly-python/19635/2

...