2015-08-19 3 views
2

У меня есть следующий dataframe, из которого я могу генерировать графики для каждого отправителя с помощью .groupby():временных рядов х-оси датируется datetimeindex панд

      sender temp_3 
utctime         
2014-10-24 11:21:08   a 24.7 
2014-10-24 11:21:09   b 22.8 
2014-10-24 11:21:09   c 23.2 
2014-10-24 11:21:09   d 24.3 
2014-10-24 11:21:10   e 23.9 
2014-10-24 11:21:10   a 24.7 
2014-10-24 11:21:11   b 22.9 
2014-10-24 11:21:11   c 23.1 
2014-10-24 11:21:11   d 24.2 
2014-10-24 11:21:12   e 23.9 
2014-10-24 11:21:12   a 24.7 
2014-10-24 11:21:13   b 22.9 
2014-10-24 11:21:13   c 23.1 
2014-10-24 11:21:13   d 24.2 
2014-10-24 11:21:14   e 23.9 
2014-10-24 11:21:14   a 24.7 
2014-10-24 11:21:15   b 22.9 
2014-10-24 11:21:15   c 23.2 
2014-10-24 11:21:15   d 24.1 
2014-10-24 11:21:16   e 23.9 

Вот мой код:

for key, grp in stack.groupby(['sender']): 
    plt.plot(grp.index, 
      grp['temp_3'].dropna(), 
      label='%s %s' % ('Temperature', key)) 

Однако, когда я применяю это к своему полному набору данных с несколькими датами в utctime, ось x остается временем - я хочу, чтобы она показывала даты в этом случае.

Вот пример полного набора данных:

    sender temp_3 
utctime         
2014-10-23 13:15:08   a 23.0 
2014-10-24 16:09:13   b 24.1 
2014-10-24 18:56:01   a 23.3 
2014-10-24 21:42:42   a 23.0 
2014-10-25 00:29:22   a 22.7 
2014-10-25 03:16:02   c 23.1 
2014-10-25 06:02:43   c 22.8 
2014-10-25 08:49:23   c 23.7 
2014-10-25 11:36:03   c 24.8 
2014-10-25 14:22:43   c 25.7 
2014-10-25 17:09:24   d 24.9 
2014-10-25 19:56:05   b 24.6 
2014-10-25 22:42:45   b 24.2 
2014-10-26 01:29:26   e 22.7 
2014-10-26 04:16:15   d 23.6 
2014-10-26 07:02:56   e 22.4 
2014-10-26 09:49:36   e 22.7 
2014-10-26 12:36:16   e 22.2 
2014-10-26 15:22:57   e 23.1 
2014-10-26 18:09:46   d 23.8 
2014-10-26 20:56:26   b 23.8 
2014-10-26 23:43:07   e 22.7 

Я бы разместить изображения, но нужно больше респ!

Я пробовал преобразовать .to_julian_time и to_py_datetime после выполнения некоторых других сообщений в стеке. Я также пробовал grp.index.date, но это все еще дает время по оси x и хуже, потому что он теряет детали. Есть идеи?

+0

ли вы попробовать 'plt.plot_date (...)'? –

+0

Просто попробовал, но все та же проблема – TMrtSmith

+0

Я добавлю некоторые данные с разными датами выше, если вы хотите попробовать – TMrtSmith

ответ

1

Установка формата на Xaxis должен сделать трюк:

plotaxis = plt.figure().gca() 
plotaxis.xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%d/%m/%y\n%H:%M')) 
for key, grp in stack.groupby(['sender']): 
plt.plot(grp.index, 
     grp['temp_3'].dropna(), 
     label='%s %s' % ('Temperature', key)) 
+0

Это хорошо работает. Я попробовал один и тот же трюк на подзаголовке, где я бы разделил каждого отправителя на отдельный фрейм данных, а DateFormatter запустил ошибку значения. Какие-либо предложения? – TMrtSmith

+0

Посмотрите на http://matplotlib.org/examples/pylab_examples/date_demo1.html, возможно, вы не применяете его к оси подзаголовка ('ax' в демо-коде: fig, ax = plt.subplots()). – fernandezcuesta

Смежные вопросы