【问题标题】:Create a time series plot with month and year on x-axis在 x 轴上创建月份和年份的时间序列图
【发布时间】:2021-09-27 20:13:56
【问题描述】:

我创建了一个 DataFrame,其中日期(格式 = 1950-01-01)作为索引、失业率和衰退的二元变量(真 = 衰退)。我正在尝试将数据绘制为 x 轴上的月份和年份的时间序列。现在它只显示年份。

fig, ax = plt.subplots(figsize=(10,5)) 
df1.plot(y='UNRATE',ax=ax)
plt.show()

此外,我应该在经济衰退的几个月里遮遮掩掩。我使用ax.axvspan(),它将 x-start 和 x-ends 作为遮蔽位置的参数。但是,我的“开始”和“结束”代码存在问题 - 我认为这与几个月有关,但我不确定。如果有人也可以帮助我解决这个问题,那就太棒了!谢谢!

starts = df1['USREC']==True
ends = df1['USREC']==False

n = len(df1)
for i in range(1,n):
    ax.axvspan(starts[i], ends[i], facecolor='lightgray')

【问题讨论】:

  • 这有帮助吗?这是我打印 df1.head() DATE: 1950-01-01 , 1950-02-01 , 1950-03-01 , 1950-04-01 , 1950-05-01 UNRATE: 6.5 , 6.4 , 6.3 时的输出5.8 , 5.5 USREC: 0, 0, 0, 0, 0
  • 不是真的,一个最小的例子应该很容易复制以便重现问题
  • 我编辑了评论,您应该可以用它重新创建部分数据框。我想我不明白您还需要什么其他信息...不过感谢您的尝试!
  • 我提供了一个解决方案,因此您可以看到 MRE 是什么(无需重建任何东西,只需复制并运行);)

标签: python pandas date datetime


【解决方案1】:

下面是一个最小的工作示例。可能有更好的方法可以做到这一点,但我保留了一个尽可能接近原始代码的版本:

df1 = pd.DataFrame({'DATE': ['1950-01-01', '1950-02-01', '1950-03-01', '1950-04-01', '1950-05-01'],
                    'UNRATE': [6.5, 6.4, 6.3, 5.8, 5.5],
                    'USREC': [0, 0, 1, 0, 0]
                   })
df1['DATE'] = pd.to_datetime(df1['DATE'])

fig, ax = plt.subplots(figsize=(10,5)) 
df1.plot(x='DATE', y='UNRATE', ax=ax)

starts = df1['USREC']==True
ends = df1['USREC']==False

for i, r in df1.iterrows():
    if r['USREC'] == 1:
        ax.axvspan(r['DATE'], r['DATE']+pd.Timedelta('31d'), facecolor='lightgray')

输出:

【讨论】:

    猜你喜欢
    • 2021-08-24
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    相关资源
    最近更新 更多