使用 matplotlib 绘图没有给出所需的日期时间格式

Posted

技术标签:

【中文标题】使用 matplotlib 绘图没有给出所需的日期时间格式【英文标题】:Plotting with matplotlib does not give desired datetime format 【发布时间】:2017-08-05 23:31:30 【问题描述】:

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

目标:使用%Y-%m-%d %H:%M:%S 格式的 x 轴值绘制 DateTime vs Value。

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

下面是我使用的代码的 sn-p 及其结果。总的来说,我对编程很陌生,如果你们能指出我正确的方向,我将不胜感激!

>>> 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()

日期时间与值的关系图:

【问题讨论】:

可以试试加import matplotlib.dates as dates dates.DateFormatter('%Y-%m-%d %H:%M:%S') 它不会改变任何东西。感谢您的快速回复! 抱歉在最后添加这一行而不是plt.show()formatter = dates.DateFormatter('%Y-%m-%d %H:%M:%S') plt.gcf().axes[0].xaxis.set_major_formatter(formatter) 现在是正确的。谢谢。 pd.to_datetime 没有做任何事情还是我用错了? to_datetime 将字符串转换为datetime64 dtype,它不会影响格式或显示,这是您需要在matlplotlib中做的事情。或者,您可以做的是生成字符串并绘制这些字符串,但字符串不如实际日期时间有用。所以例如df['date_string'] = df['DateTime'].dt.strftime('%Y-%m-%d %H:%M:%S')会给你一列日期字符串 【参考方案1】:

您可以使用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)

结果:

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()

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

【讨论】:

将阅读更多关于数据类型转换的内容。感谢您的详细解释。

以上是关于使用 matplotlib 绘图没有给出所需的日期时间格式的主要内容,如果未能解决你的问题,请参考以下文章

Matplotlib 绘图 x 轴(数据文件日期时间)

Matplotlib:如何在使用日期时间轴绘图时跳过一系列小时?

为啥这个选择排序代码在 Cpp 中,没有给出所需的输出

没有给出与所需的形式参数“信息”相对应的参数

有没有办法以所需的格式加入这两个表?

CS7036 C#WinForm没有给出与所需的形式参数相对应的参数