使用 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 绘图没有给出所需的日期时间格式的主要内容,如果未能解决你的问题,请参考以下文章