python: построение вертикальной полосы с использованием matplotlib для оси, на которой отображено время

Подскажите как отрисовать вертикальную полосу с использованием matplotlib, при условии, что ось x задаёт время

Для отображения полосы использую метод axvspan

Вот весь код:

Изначально ось x содержит timestamp (секунды с эры UNIX)

    import datetime
    import pytz
    import math
    import pathlib

    import matplotlib
    import matplotlib.pyplot as plt
    import numpy as np


    # считать данные из файла (в виде Numpy массива)
    def loadDataFromFile(path):
        with open(path) as file:
            data = [line[:-1].split(';') for line in file]

        return np.array(data, dtype=object)


    # инициализировать отрисовку графики
    def initializeRender(width = 1280, height = 1024):
        px = 1 / plt.rcParams['figure.dpi']
        fig, ax = plt.subplots(figsize=(width * px, height * px))

        return (fig, ax)


    # завершить отрисовку графики
    def releaseRender(path):
        fig.savefig(path)
        #        plt.show()

        plt.clf()
        plt.close("all")


    # считать данные из файла
    src_data = loadDataFromFile(file_path)

    x = np.array(src_data[:, 0], float)
    y = np.array(src_data[:, 1], float)

    # преобразовать данные
    dates = [datetime.datetime.fromtimestamp(ts, pytz.timezone('Europe/Moscow')) for ts in x]
    datenums = matplotlib.dates.date2num(dates)

    # построить график
    fig, ax = initializeRender(1280, 1024)

    xfmt = matplotlib.dates.DateFormatter('%H:%M')
    ax.xaxis.set_major_formatter(xfmt)
    ax.xaxis.set_major_locator(matplotlib.dates.HourLocator(interval=2))

    plt.grid(color='#d0d0d0', linestyle='--', linewidth=0.5)
    ax.plot(datenums, y)

    # отрисовать полосу
    x_l = matplotlib.dates.date2num([datetime.datetime.fromtimestamp(ts, pytz.timezone('Europe/Moscow')) for ts in [x.max() / 2, x.max() / 2 + 3600]])
    ax.axvspan(x_l[0], x_l[1], alpha=0.5, color='red')

    releaseRender(graph_path)

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

Locator attempting to generate 123829 ticks ([8912.0, ..., 19231.0]), which exceeds Locator.MAXTICKS (1000).

похоже, что полоса уезжает далеко направо (в графике время условно сутки от вчера до сегодня)

Подскажите, в чем может быть проблема?


Ответы (1 шт):

Автор решения: Zhihar

разобрался с вопросом - код правильный, все дело в том, что для теста я хотел построить полосу по центру, а для этого надо было сделать (x.max() + x.min()) / 2 а не x.max() / 2, в результате действительно данные уползали куда-то в прошлый век :)

→ Ссылка