сюжет панд с отметками времени на оси х - единицы измерения? - PullRequest
0 голосов
/ 17 ноября 2018

У меня есть фрейм данных pandas со значениями даты и времени:

    Date/Time           Event Value
0   2018-11-15 17:17:49 62
1   2018-11-15 17:27:50 63
2   2018-11-15 17:37:50 64
3   2018-11-15 17:42:49 65
4   2018-11-15 18:17:49 64
5   2018-11-15 19:27:48 65
6   2018-11-15 19:37:48 66
7   2018-11-15 19:47:49 67
8   2018-11-15 19:57:49 68
9   2018-11-15 20:12:49 69

print (tmp.dtypes)

Date/Time      datetime64[ns]
Event Value             int64

График выглядит так:

fig, ax1 = plt.subplots(1,1,figsize=(8,4))
tmp.plot(x='Date/Time',y='Event Value', legend=None, ax=ax1)

enter image description here

Ось x была отформатирована с соответствующими датами и временем (и может быть дополнительно отформатирована с использованием set_major_formatter).

Теперь я хочу нарисовать прямоугольник на графике, чтобы выделить определенное время. Для этого мне нужно знать x-позиции.

print([x for x in ax1.get_xticks()])

[737013.7291666666, 737013.75, 737013.7708333334, 737013.7916666666, 737013.8125, 737013.8333333334]

Это действительно значения x, т. Е. Если я использую их как начало координат для прямоугольника, который он строит, как и ожидалось.

rect = patches.Rectangle((737013.75,55),.01,100)
ax1.add_patch(rect)

enter image description here

Я не понимаю, откуда эти цифры. Это не эпохальные значения, хотя они немного похожи на них («737013,75» соответствует «1970-01-09 07:43:33», что для меня ничего не значит).

Как я могу получить x-позицию на графике из значения даты / времени в моем фрейме данных?

1 Ответ

0 голосов
/ 17 ноября 2018

Если вы строите информационный фрейм с опцией x_compat=True, вы можете быть уверены, что это единицы измерения matplotlib.dates.Иначе, панды могут выбрать некоторые единицы измерения для вас.

Здесь панды используют единицы дат matplotlib.Они определены как :

Matplotlib представляет даты с использованием чисел с плавающей запятой, указывающих количество дней с 0001-01-01 UTC, плюс 1. Например, 0001-01-01, 06:00 - это 1,25, а не 0,25.Значения <1, т.е. даты до 0001-01-01 UTC, не поддерживаются. </p>

Однако вы не должны рассчитывать эти единицы самостоятельно.Matplotlib предоставляет вспомогательные функции

  • matplotlib.dates.date2num
  • matplotlib.dates.num2date
  • matplotlib.dates.datestr2num

, которые можно использовать для расчета обратнои далее между единицами.

Например, matplotlib.dates.datestr2num("2018-11-15 19:27:48") дает вам 737013.8109722222.

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