совокупный индекс метки времени на графике панд - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть временной ряд данных, который я хотел бы построить. Ночью, когда я не собираю данные, у меня разрыв между 9 часами вечера и 7 часами утра, который выглядит немного уродливо на графике и затрудняет чтение.

Вот небольшой пример, чтобы понять проблему:

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


df2 = pd.DataFrame({ 'A' : pd.Series(np.random.randn(4),index=list(range(4)),dtype='float32'),
                    'B' : pd.date_range('1/1/2000', periods=4)})




print(df2.to_string())
df2.ix[3,'B'] = pd.to_datetime('2005-01-02')

print(df2.to_string())

df2.index = df2.B
fig = plt.figure()
ax = fig.add_subplot(111)

ax.plot(df2.index, df2["A"])
plt.show()

график с 1/1/2000 по 1/3/2000 практически не читается, поскольку график масштабируется так, чтобы отображать также данные за 2005 год. Есть ли способ исключить, что индексы (?) Из 1/3 / 2000 по 1/3/2005?

Спасибо и ура, E.

1 Ответ

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

IIUC, позвольте мне создать набор образцов и плохой результат.

np.random.seed(0)
df = pd.DataFrame(np.random.random(500), index=pd.date_range('2018-11-25 07:00:00', periods=500, freq='10T'))
df2 = df[(df.index.hour >= 7) & (df.index.hour < 21)]
df2.plot()

Выход:

enter image description here

Тем не менее, мы можем исключить эти плоские сечения, как это:

np.random.seed(0)
df = pd.DataFrame(np.random.random(500), index=pd.date_range('2018-11-25 07:00:00', periods=500, freq='10T'))

df2 = df[(df.index.hour >= 7) & (df.index.hour < 21)]

df2.index = df2.index.strftime('%Y-%m-%d')

fig, ax = plt.subplots()
_ = df2.plot(ax=ax)
skip = df2.shape[0]//7 + 1
label = [i for i in df2.index[::skip]]
_ = plt.xticks(np.arange(0,df2.shape[0],skip),label,rotation=45)

Выход:

enter image description here

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