如何更改显示日期和时间的 x 轴以仅显示月份名称?

Posted

技术标签:

【中文标题】如何更改显示日期和时间的 x 轴以仅显示月份名称?【英文标题】:How do you change an x axis that displays date and time to show only month name? 【发布时间】:2021-01-28 20:50:33 【问题描述】:

我有 2 列日期/时间和值的数据框“df”:

import numpy as np
import pandas as pd
df = pd.DataFrame(pd.date_range('2012-06-01','2012-06-04', freq='H'), columns=['date/time'])
data = np.random.randint(5, 100, 73)
temp= pd.DataFrame(data, columns=['Value'])
df['Value']=temp
df.head()

当我用这些数据绘制线图时:

lines=df.plot.line(x='date/time', y='Value')

我得到这张图: enter image description here

我对图表很满意,但我希望我的 x 轴只显示月份名称。同样在我的实际图表中,我有很多不同月份的日期,因此在显示它时,x 轴标签不应重叠。有人可以帮我解决这个问题吗?

我已经看过 .xaxis.set_major_locator 之类的东西,但我无法让它工作。

【问题讨论】:

【参考方案1】:

我不得不稍微更改您的代码,因为它使用了超过 3 天的每小时范围,这导致所有月份都是 6 月。此外,您的temp 行是不必要的,因为您可以等效地创建随机整数并将其直接分配给df['Value'],而无需先创建temp 数据帧。

import numpy as np
import pandas as pd
df = pd.DataFrame(pd.date_range('2011-06-01','2012-06-04', freq='M'), columns=['date/time'])
df['Value'] = np.random.randint(5, 100, len(df.index))

fig = plt.figure()
ax = fig.add_subplot(111)

months_list = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
### Iterate over the TimeStamp objects, calling the month format of each
months = [months_list[dt.month - 1] for dt in df['date/time']]

ax.plot(months, df['Value'])
plt.show()

关于避免重叠刻度标签的部分,您可以对标签进行基本旋转:

ax.tick_params(axis='x', labelrotation=30)

或参考这些答案,这些答案显示了两种不同的方法:

    Adds a label pad to alternate tick labels Fine-tune rotation and positions of tick labels

结果如下:

【讨论】:

这里的问题是您仅在制作数据框时才将日期/时间列设置为日期。此外,当我运行代码时,它会显示“'str' object has no attribute 'month'” for line months = [months_list[dt.month - 1] for dt in df['date/time']] 数据/时间列确实由日期(实际上是时间戳)组成,正如您使用 pd.date_range 创建它时在您的代码中一样。这就是允许我们在其上调用 .month 方法的原因。您是否以某种方式将日期/时间列的值格式化为字符串?因为那会导致你提到的错误 谢谢你成功了。一直以来,我的日期/时间都是字符串格式。这可能就是我无法获得任何其他解决方案的原因。

以上是关于如何更改显示日期和时间的 x 轴以仅显示月份名称?的主要内容,如果未能解决你的问题,请参考以下文章

重新排列 x 轴以显示多年数据的儒略日期(例如 0-365)一次

如何仅在月份、日期和年份中更改我的日期选择器显示

Plotly 轴以相反的顺序显示日期(最近到最早)-Python

希望在直方图上编辑 X 轴以显示 R 中的大值 [重复]

Bootstrap Datepicker - 动态更改格式 - 设置月份名称获取月份值

Android - 显示不同日期格式的月份名称