Matplotlib удаляет пространство подсвечника для отсутствующих данных

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

Итак, после того, как я начертил его, между свечами есть промежутки.

Изображение результата

Как я могу удалить их?

Вот мой код функции плоттера:

ohlc = []
date = []
while (loop < candleLength) :
    date.append(dateToFloat(stockData['date'][loop]))
    append = date[loop], stockData['open'][loop], stockData['high'][loop], stockData['low'][loop], stockData['close'][loop]
    ohlc.append(append)
    loop += 1

fig = plt.figure()
ax = plt.subplot2grid((1,1), (0,0))

candlestick_ohlc(ax, ohlc, width=0.66, colorup='#4dff4d', colordown='#ff471a')


for label in ax.xaxis.get_ticklabels():
    label.set_rotation(45)

ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
ax.xaxis.set_major_locator(mondays)
ax.grid(True)

person YONG BAGJNS    schedule 16.06.2016    source источник
comment
DataFormatter предназначен для отображения непрерывного диапазона дат, поэтому было бы лучше построить ось X без него.   -  person Martin Evans    schedule 16.06.2016
comment
Вы должны включить примеры данных в свой код, чтобы люди могли тестировать свои решения.   -  person Keatinge    schedule 16.06.2016


Ответы (3)


Вы можете установить xticks порядковые номера (0, 1, 2, 3 ... до количества свечей, которые вы хотите построить), а затем установить xticklabels фактических дат для лучшей визуализации. См. мой ответ на этот вопрос для детальной реализации.

person Elgin Cahangirov    schedule 16.08.2019

Проверьте эту ссылку: Как я могу построить только будние дни, используя Подсвечник Python matplotlib?

Это должно ответить на ваш вопрос. Я также использую его в своем коде.

person Aloex    schedule 16.06.2016

Попробуйте добавить это в свой код.

def mydate(x,pos):
    try:
        return mdates[int(x)].strftime('%Y-%m-%d')
    except IndexError:
        return ''

ax.xaxis.set_major_formatter(ticker.FuncFormatter(mydate))

Так:

import matplotlib.ticker as ticker

ohlc = []
date = []
while (loop < candleLength) :
    date.append(dateToFloat(stockData['date'][loop]))
    append = date[loop], stockData['open'][loop], stockData['high'][loop], stockData['low'][loop], stockData['close'][loop]
    ohlc.append(append)
    loop += 1

fig = plt.figure()
ax = plt.subplot2grid((1,1), (0,0))

candlestick_ohlc(ax, ohlc, width=0.66, colorup='#4dff4d', colordown='#ff471a')


for label in ax.xaxis.get_ticklabels():
    label.set_rotation(45)


def mydate(x,pos):
    try:
        return mdates[int(x)].strftime('%Y-%m-%d')
    except IndexError:
        return ''

ax.xaxis.set_major_formatter(ticker.FuncFormatter(mydate))

ax.xaxis.set_major_locator(mondays)
ax.grid(True)
person 江明哲    schedule 16.08.2019
comment
Добро пожаловать в SO, мы ценим ваш вклад! Пожалуйста, добавьте еще несколько пояснений к вашему ответу. - person B--rian; 16.08.2019