如何绘制时间序列,其中x轴是matplotlib中的datetime.time对象?

时间:2015-11-08 14:17:59

标签: python datetime numpy pandas matplotlib

我正在尝试绘制第二天晚上9点到下午6点的时间序列数据。这是我失败的尝试。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from datetime import time    

a=np.array([35,25,24,25,27,28,30,35])
df=pd.DataFrame(index=pd.date_range("00:00", "23:00", freq="3H").time,data={'column1':a})

          column1
00:00:00       35
03:00:00       25
06:00:00       24
09:00:00       25
12:00:00       27
15:00:00       28
18:00:00       30
21:00:00       35

将数据重新编制为从21:00到18:00。也许还有更好的方法来实现这一部分,但这很有效。

df=df.reindex(np.concatenate([df.loc[time(21,00):].index,df.loc[:time(21,00)].index[:-1]]))

          column1
21:00:00       35
00:00:00       35
03:00:00       25
06:00:00       24
09:00:00       25
12:00:00       27
15:00:00       28
18:00:00       30

plt.plot(df.index,df['column1'])

x轴似乎与df.index不匹配。轴也从00:00开始,而不是21:00。有没有人知道一个不涉及使用x轴的字符串标签的解决方案?

1 个答案:

答案 0 :(得分:0)

一种简单的方法是在不明确x轴的情况下绘制数据并更改标签。问题是这只有在数据之间的时间不变时才有效。我知道你说你不想使用字符串标签,所以我不知道这个解决方案是你想要的。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from datetime import time    

a=np.array([35,25,24,25,27,28,30,35])

df=pd.DataFrame(index=pd.date_range("00:00", "23:00",freq="3H").time,data={'column1':a})

df=df.reindex(np.concatenate([df.loc[time(21,00):].index,df.loc[:time(21,00)].index[:-1]]))

# Now we create the figure and the axes
fig,axes=plt.subplots()
axes.plot(df['column1'])  # In the x axis will appear 0,1,2,3...
axes.set_xticklabels(df.index)  # now we change the labels of the xaxis

plt.show()

这应该可以解决问题。

example of result