【问题标题】:Setting x-axis as Month from datetime arange of dataframe column using matplotlib plotting使用matplotlib绘图将x轴设置为数据框列的日期时间范围内的月份
【发布时间】:2020-08-11 13:25:40
【问题描述】:

如何将 x 轴上的日期显示为月份,例如“一月”、“二月”……“十二月”。而不是 2015-01、2015-02 等。 我正在复制我的 df 的缩短版本。

我已阅读 https://matplotlib.org/examples/api/date_demo.html,但不确定如何将其应用于我的数据。

或者,也许当我将日期映射到 pd.to_datetime 时,我可以以某种方式将它们转换为仅使用“%b”作为月份名称的月份? 或者可以在 xticks 中使用类似pd.date_range('2015-01-01','2016-01-01', freq='MS').strftime("%b").tolist() 的东西? 谢谢!

import matplotlib.pyplot as plt

df1 = pd.DataFrame({'Date':['2015-01-01','2015-01-02','2015-01-03','2015-01-04','2015-01-05'],'Values':[-13.3,-12.2,6.7,8.8,15.5]})
df1.Date=pd.to_datetime(df1.Date)
df1['Day']=pd.DatetimeIndex(df1['Date']).day
df1['Month']=pd.DatetimeIndex(df1['Date']).month
df1=df1[['Month','Day','Values']]
df1

df2=pd.DataFrame({'Date':['2015-01-01','2015-01-02','2015-01-03','2015-01-04','2015-01-05'],'Values':[-5.6,-5.6,0,3.9,9.4]})
df2['Day']=pd.DatetimeIndex(df2['Date']).day
df2['Month']=pd.DatetimeIndex(df2['Date']).month
df2=df2[['Month','Day','Values']]
df2

plt.figure(figsize=(10,6))

ax = plt.gca()
dates = np.arange('2015-01-01', '2015-01-06', dtype='datetime64[D]')
dates=list(map(pd.to_datetime, dates))
plt.plot(dates, df1.Values, '-^',dates, df2.Values, '-o')

ax.set_xlim(dates[0],dates[4])

x = plt.gca().xaxis

for item in x.get_ticklabels():
    item.set_rotation(45)

plt.show()

【问题讨论】:

  • 恕我直言,您对df2['Day']=pd.DatetimeIndex(df2['Date']).day 等进行了太多处理...除非您的输入数据是这样的,在这种情况下,您应该将monthday 组合回@ 987654329@.
  • 我必须预处理这些数据以删除一个月中的某些日期,这就是留下“月”和“日”的原因。我可能会再次将它们转换为日期。但是,我只使用两个数据框中的“值”列?
  • 如果我将它们组合回日期,我应该如何进行?谢谢你,先生。

标签: numpy datetime matplotlib plot xticks


【解决方案1】:

我已经得出以下解决方案:

ax.xaxis.set_major_formatter(mdates.DateFormatter('%b'))

也许,有人有更好的。

【讨论】:

    猜你喜欢
    • 2019-05-01
    • 2022-09-23
    • 1970-01-01
    • 2016-04-11
    • 2013-08-01
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    相关资源
    最近更新 更多