[英]how to plot time series where x-axis is datetime.time object in matplotlib?
I'm trying to graph timeseries data beginning from 9pm to 6pm the next day. 我正在尝试绘制第二天晚上9点到下午6点的时间序列数据。 Here is my failed attempt.
这是我失败的尝试。
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
reindexing data to go from 21:00 to 18:00. 重新索引数据从21:00到18:00。 perhaps there is a better way of achieving this part too, but this works.
也许有更好的方法来实现这一部分,但这是有效的。
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'])
the x-axis does not seem to match df.index. x轴似乎与df.index不匹配。 also the axis begins at 00:00 not 21:00.
轴也从00:00开始,而不是21:00。 does anyone know a solution that doesn't involve using string labels for the x-axis?
有没有人知道一个不涉及使用x轴的字符串标签的解决方案?
A simple way to do that is to plot the data without expliciting the x axis and the to change the labels. 一种简单的方法是在不明确x轴的情况下绘制数据并更改标签。 The problem is that this will only works if the time between the data is constant.
问题是这只有在数据之间的时间不变时才有效。 I know you said you didn't want to use string labels, so I don't know of this solution will be what you want.
我知道你说你不想使用字符串标签,所以我不知道这个解决方案会是你想要的。
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()
This should do the trick and will plot what you want. 这应该是诀窍,并将绘制你想要的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.