2016-02-05 3 views
0

Я бы нарисовал фигуру с matplotlib, в которой ось x есть метка времени с yy-mm-dd hh-mm-ss. У меня есть ts в datetime64 (серия pandas), и чтобы показать также (справа) минуты и секунды, я следую подсказке в этом link, используя date2num. Проблема заключается в том, что он не строит и не-смысловые даты: enter image description herematplotlib - plot wrong datetime

import datetime as dt 
import matplotlib.pyplot as plt 
import matplotlib.dates as md 
for df in dfs: 
    datenums=md.date2num(df.toPandas()["timestamp"]) 
    plt.xticks(rotation=25) 
    xfmt = md.DateFormatter('%Y-%m-%d %H:%M:%S') 
    ax.xaxis.set_major_formatter(xfmt) 
    plt.plot(datenums,x) 
    plt.show() 

где df.toPandas() [ "метка"] является:

0 2015-12-15 03:53:13 
Name: timestamp, dtype: datetime64[ns] 

Я пытался конвертировать datetime64 в DateTime, но результат Безразлично Не меняйте.

+1

Можете ли вы опубликовать код, воспроизводящий эту проблему? см. [MCVE] (// stackoverflow.com/help/mcve)? – tom

+0

добавлен код, спасибо –

+0

Почему, по-вашему, метки ярлыков ошибочны? Тики равномерно распределены, а не размещены. Если вы хотите точно контролировать, где размещены тики, используйте объявление «FixedLocator» для основного локатора xaxis. – tacaswell

ответ

0

Если у вас есть значения временных меток на секунд, использовать это, чтобы создать список для всех клещевых меток, а затем добавить их на участке, учитывая ваши данные, связанные с массивом меток времени

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

OX_ticks_name = [datetime.datetime.fromtimestamp(x).strftime('%Y-%m-%d %H:%M:%S') for x in arrayTmstmp] 
OX_ticks_pos = np.arange(0,len(arrayTmstmp)) 

fig, ax = plt.subplots(figsize=(16, 9), dpi=100) 
... 
ax.set_xticks(OX_ticks_pos) 
ax.set_xticklabels(OX_ticks_name, rotation=40, horizontalalignment='right', fontsize=10) 
plt.tight_layout() 
plt.show() 

Конечно, положение каждого тика и имя для каждого может быть настроено так, как вы хотите.