如何用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
相关产品推荐
相关产品推荐

