You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python复现含衰退期阴影标注的失业率图表(基于FRED数据)

实现失业率与衰退期标注图表的步骤

以下是完整的代码实现与分步说明:

1. 完整代码整合

import numpy as np
import pandas as pd
import pandas_datareader as wb
import datetime as dt
import matplotlib.pyplot as plt

# 从FRED获取数据
data_fred = wb.get_data_fred(['USRECD'], dt.datetime(1969, 12, 31)).asfreq('MS')
data_fred_m = wb.get_data_fred(['UNRATE'], dt.datetime(1969, 12, 31)) 

# 合并数据并清理缺失值
data = pd.concat([data_fred, data_fred_m], axis=1).dropna()

# 创建图表框架
fig, ax = plt.subplots(figsize=(12, 6))

# 绘制失业率折线
ax.plot(data.index, data['UNRATE'], label='失业率 (%)', color='#1f77b4')

# 识别衰退期的起始与结束日期
recession_changes = data['USRECD'].diff()
recession_starts = data[recession_changes == 1].index
recession_ends = data[recession_changes == -1].index

# 处理数据首尾处于衰退期的边界情况
if data['USRECD'].iloc[0] == 1:
    recession_starts = pd.concat([pd.DatetimeIndex([data.index[0]]), recession_starts])
if data['USRECD'].iloc[-1] == 1:
    recession_ends = pd.concat([recession_ends, pd.DatetimeIndex([data.index[-1]])])

# 添加衰退期阴影标注
for start, end in zip(recession_starts, recession_ends):
    ax.axvspan(start, end, color='lightgray', alpha=0.5)

# 自定义图表样式
ax.set_title('美国失业率与经济衰退期', fontsize=14)
ax.set_xlabel('日期', fontsize=12)
ax.set_ylabel('失业率 (%)', fontsize=12)
ax.legend()
ax.grid(True, linestyle='--', alpha=0.7)
plt.xticks(rotation=45)
plt.tight_layout()

# 展示图表
plt.show()

2. 关键步骤说明

  • 数据清理:使用dropna()移除合并后数据中的缺失值,确保时间序列连续
  • 衰退期识别:通过diff()方法捕捉USRECD指标的状态变化(0→1为衰退开始,1→0为衰退结束),同时处理数据首尾处于衰退期的特殊情况
  • 阴影标注:使用axvspan()绘制垂直阴影区域,alpha参数控制透明度,避免遮挡失业率折线
  • 样式优化:添加网格、旋转日期标签、调整布局,提升图表可读性

内容的提问来源于stack exchange,提问作者Jacques Tebeka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 23:30:25