使用matplotlib绘图并不能提供所需的日期时间格式

时间:2017-03-15 09:50:04

标签: python python-3.x pandas datetime matplotlib

我使用的数据来自使用pd.read_excel的excel文件。

目标:使用格式为%Y-%m-%d %H:%M:%S

的x轴值绘制DateTime vs Value

问题:X轴格式不是所需的%Y-%m-%d %H:%M:%S

下面是我使用的代码片段及其结果。我对编程很新,如果你们能指出我正确的方向,我会非常感激!

>>> df.head()

            DateTime  Value
0 2016-05-17 22:50:27   1914
1 2016-05-17 22:55:27   1597
2 2016-05-17 23:00:27   1429
3 2016-05-17 23:05:27   1462
4 2016-05-17 23:10:27   2038

>>> df['DateTime'] = pd.to_datetime(df['DateTime'], format='%Y-%m-%d %H:%M:%S')

>>> df.plot(x='DateTime', y='Value')

>>> plt.show()

日期时间与价值的关系曲线:
Plot of DateTime vs Value

1 个答案:

答案 0 :(得分:3)

您可以使用matplotlib.dates.DateFormatter来实现此目标:

import matplotlib.dates as dates
df['DateTime'] = pd.to_datetime(df['DateTime'], format='%Y-%m-%d %H:%M:%S')
df.plot(x='DateTime', y='Value')
formatter = dates.DateFormatter('%Y-%m-%d %H:%M:%S') 
plt.gcf().axes[0].xaxis.set_major_formatter(formatter)

结果:

enter image description here

to_datetime将字符串转换为datetime64 dtype,它不会影响pandas或matplotlib中的显示,因此上面的方法正确。

但是,您可以使用dt.strftime生成日期字符串以添加一列所需的日期字符串,但是这会为您提供一列字符串,这在我看来并不那么有用:

In [39]:
df['DateStrings'] = df['DateTime'].dt.strftime('%Y-%m-%d %H:%M:%S')
df

Out[39]:
             DateTime  Value          DateStrings
0 2016-05-17 22:50:27   1914  2016-05-17 22:50:27
1 2016-05-17 22:55:27   1597  2016-05-17 22:55:27
2 2016-05-17 23:00:27   1429  2016-05-17 23:00:27
3 2016-05-17 23:05:27   1462  2016-05-17 23:05:27
4 2016-05-17 23:10:27   2038  2016-05-17 23:10:27

这导致情节:

df.plot(x='DateStrings', y='Value')
plt.show()

enter image description here

你可以看到x轴标签是duff,你需要旋转它们,使用前一种方法自动处理