не может видеть дату / время в позиции курсора при построении графика с помощью matplotlib. Получение ошибки как «DateFormatter нашел значение x = 0»

1

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

['2018-06-28 20:00:00', '2018-06-28 20:00:05', '2018-06-28 20:00:10', '2018-06-28 20:00:15', '2018-06-28 20:00:20', '2018-06-28 20:05:30']

Я рисую график таким образом, где timestamp и iops - это список, например:

p1, = host.plot(timestamp[0:], iops[0:], "b-", label="IOPS")

Я установил x_lim как:

host.set_xlim([timestamp[0],timestamp[-1]])

Это то, что я сделал, чтобы показать временную метку по оси x:

_fmt = mdates.DateFormatter('%Y-%m-%d')
_fmt.format_data_short = lambda pos: mdates.num2date(pos).strftime("%Y-%m-%d; %H:%M:%S")
 host.xaxis.set_major_formatter(_fmt)
Теги:
matplotlib
datetime
timestamp

1 ответ

0
Лучший ответ

Полное сообщение об ошибке читается

ValueError: DateFormatter обнаружил значение x = 0, что является незаконной датой. Обычно это происходит из-за того, что вы не указали оси, что это график даты, например, с ax.xaxis_date()

И это действительно так, потому что вы замышляете строки здесь, и matplotlib не может знать, что они несут в себе значение как "дата" для вас.

Решение состоит в том, чтобы преобразовать их в даты.

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from datetime import  datetime

timestamp= ['2018-06-28 20:00:00', '2018-06-28 20:00:05', '2018-06-28 20:00:10', 
            '2018-06-28 20:00:15', '2018-06-28 20:00:20', '2018-06-28 20:05:30']
dates = [datetime.strptime(t, "%Y-%m-%d %H:%M:%S") for t in timestamp]
y = list(range(6))

fig, ax = plt.subplots()
p1, = ax.plot(dates, y, "b-", label="IOPS")

ax.set_xlim([dates[0],dates[-1]])

_fmt = mdates.DateFormatter('%Y-%m-%d')
_fmt.format_data_short = lambda pos: mdates.num2date(pos).strftime("%Y-%m-%d; %H:%M:%S")
ax.xaxis.set_major_formatter(_fmt)

plt.show()

Изображение 174551

  • 0
    при наведении курсора мыши по оси x отображается только этот формат "% d;% H:% M". Как я могу сделать это ""% Y-% m-% d; % H:% M:% S ". Я полагаю, DateFormatter не работает. Я строю график для записей с 1 lakh.
  • 0
    Не уверен, в чем проблема. Я получаю правильный формат в левом нижнем углу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню