在X轴上调整时间戳-Matplotlib

时间:2019-03-04 03:09:59

标签: python pandas matplotlib plot time

我试图按self.__errorLog的顺序创建line plot。对于下面的time,第一个值出现在df处,并以07:00:00结尾。

但是00:00:40未分配给timestamps,并且x-axis之后的row首先是midnight,而不是最后。

plotted

enter image description here

1 个答案:

答案 0 :(得分:2)

您的timedelta对象已由matplotlib转换为数字表示形式。这就是为什么您没有在x轴上获得日期的原因。而且剧情按顺序进行。只是'00:40:00'小于所有其他时间,因此被绘制为最左边的点。

您可以做的是使用日期时间格式来包含日期,这将指示00:40:00应该排在最后,因为它将在第二天出现。您还可以使用熊猫绘图方法来简化格式设置:

d = ({
    'Time' : ['2019/1/1 7:00:00','2019/1/1 10:30:00','2019/1/1 12:40:00',
              '2019/1/1 16:25:00','2019/1/1 18:30:00','2019/1/1 22:40:00',
              '2019/1/2 00:40:00'],
    'Value' : [1,2,3,4,5,4,10],           
})

df = pd.DataFrame(d)
df['Time'] = pd.to_datetime(df['Time'])

df.plot(x='Time', y='Value')

enter image description here


更新

要在您的时间点设置刻度线/刻度线,有些棘手。 post可以让您了解定位的工作原理。基本上,您需要使用类似matplotlib.dates.date2num的方法来获取日期时间的数字表示形式:

xticks = [matplotlib.dates.date2num(x) for x in df['Time']]
xticklabels = [x.strftime('%H:%M') for x in df['Time']]

ax.set_xticks(xticks)
ax.set_xticklabels(xticklabels)

enter image description here