Удалить пустое пространство между двумя датами на графике Candlestick_ohlc

У меня есть фреймворк со столбцами как

[Datetime, Open, High, Low, Close, Symbol]

Я хочу построить график OHLC с помощью Candlestick_ohlc. Примеры данных здесь: Данные

Мой код, как показано ниже:

import pandas as pd
import numpy as np
import time, os, math
from datetime import datetime
from mpl_finance import candlestick_ohlc
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

########################################
pd.set_option('display.max_rows', 50000)
pd.set_option('display.max_columns', 100)
pd.set_option('display.width', 10000)
########################################


def roundup(x):
    return int(math.ceil(x / 100.0)) * 100


df = pd.read_csv(os.path.join(os.getcwd(), "BN\\", "BANKNIFTY2020JANJUNTEST.txt"))
cols = ['Open', 'High', 'Low', 'Close']
df[cols] = df[cols].apply(pd.to_numeric, errors='coerce', axis=1).fillna(0)

df['Datetime'] = pd.to_datetime(df['Date'] + ' ' + df['Time'], format='%d-%m-%Y %H:%M:%S')
df.Datetime = pd.to_datetime(df.Datetime)
df["Datetime"] = df["Datetime"].apply(mdates.date2num)

df = df[['Datetime', 'Open', 'High', 'Low', 'Close', 'Symbol']]
print(df)

fig = plt.figure(figsize=(20, 10))
ax = plt.subplot2grid((6, 6), (0, 0), colspan=6, rowspan=6)

candlestick_ohlc(ax, df.values, width=0.6 / (9 * 12), colorup='limegreen', colordown='#ff1717')

xmin = int(df["Datetime"].iloc[0]) + 0.30
xmax = int(df["Datetime"].iloc[-1]) + 0.80
print(xmax, xmin)

p_range = roundup(df['High'].max() - df['Low'].min())
if p_range < 700:
    ymid = roundup((df['High'].max() + df['Low'].min()) / 2)
    ymin = ymid + 380
    ymax = ymid - 400
else:
    ymin = roundup(df['High'].max() + 100)
    ymax = roundup(df['Low'].min() - 100)


ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M'))
xformatter = mdates.DateFormatter('%H:%M')
xlocator = mdates.MinuteLocator(byminute=[0, 15, 30, 45], interval=1)
ax.xaxis.set_major_locator(xlocator)
ax.set_xlim([xmin, xmax])
ax.set_ylim([ymax, ymin])
plt.gcf().axes[0].xaxis.set_major_formatter(xformatter)
ax.grid(which='major', alpha=0.40, linestyle='--', color='y')
major_ticks = np.arange(ymax, ymin, 50)
ax.set_yticks(major_ticks)
ax.tick_params(labelright=True)

plt.subplots_adjust(left=0.05, bottom=0.06, right=0.95, top=0.96, hspace=0.00, wspace=0.05)

plt.show()
plt.close(fig)

Мой вывод выглядит следующим образом: Вывод

Как удалить пустое пространство между двумя датами, и я хочу, чтобы между двумя днями была горизонтальная линия. Необходимо поддерживать разделитель временных интервалов как byminute = [0, 15, 30, 45]. Любая помощь.


person Rohit Lamba    schedule 15.01.2020    source источник
comment
Вы можете добавить данные там, где их нет, и выполнить обратное заполнение, прямое заполнение или заполнение ближайшими. Это потребует повторной индексации и использования метода, чтобы выбрать, как вы хотите его заполнить. pandas.pydata.org/pandas-docs/ стабильный / ссылка / api /   -  person scottsaenz    schedule 16.01.2020


Ответы (1)


Есть новая версия matplotlib finance, которая сделает это за вас автоматически. Попробуйте это: https://pypi.org/project/mplfinance/

person Daniel Goldfarb    schedule 17.01.2020