Python сюжетные линии из разных столбцов DataFrame - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть данные из трех сделок на фондовом рынке в кадре данных, например:

df2 = pd.DataFrame(np.array([
    [10:00, 11:00, 12:00], 
    [10:03, 11:07, 12:09], 
    [67093, 67010, 66000], 
    [67095, 67012, 66010]]),
    columns=[
        'time_opened', 
        'time_closed', 
        'level_opened', 
        'level_closed'
    ]
)

У меня есть график со временем по оси x, уровень (или цена акций) по оси y. Я хотел бы нарисовать линию / форму, которая представляет каждую сделку от каждого time_opened / level_opened до time_closed / level_closed. т.е. с 67093 в 10:00 до 67095 в 10: 03

Я пытаюсь сделать что-то вроде этого:

    fig.add_shape(
        dict(
            type='line',
            x0=positions['time_opened'],
            y0=positions['level_opened'],
            x1=positions['time_closed'],
            y1=positions['level_closed'],
            line=dict(color='Black', width=3),
        ),
    )
    fig.update_shapes(xaxis='x1')

Есть идеи, что я делаю неправильно?

1 Ответ

0 голосов
/ 29 апреля 2020
import plotly.graph_objects as go
import pandas as pd

df = pd.DataFrame({'time_opened': ['10:00', '11:00', '12:00'],
                   'time_closed': ['10:03', '11:07', '12:09'],
                   'level_opened': [67093, 67010, 66000],
                   'level_closed': [67095, 67012, 66010]})

df['time_opened'] = pd.to_datetime(df['time_opened'])
df['time_closed'] = pd.to_datetime(df['time_closed'])

layout = dict(xaxis=dict(range=[df['time_opened'].min() - pd.Timedelta('30M'),
                                df['time_closed'].max() + pd.Timedelta('30M')],
                         type='date',
                         tickformat='%H:%M'))

data = []

for i in range(df.shape[0]):

    data.append(go.Scatter(x=[df['time_opened'][i], df['time_closed'][i]],
                           y=[df['level_opened'][i], df['level_closed'][i]],
                           name='trade ' + str(i + 1)))

fig = go.Figure(data=data, layout=layout)

fig.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...