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

如何使用matplotlib绘制X轴同时显示年月的时间序列图并添加衰退阴影

解决方案

问题1:X轴同时显示月份与年份

你需要手动配置matplotlib的日期定位器与格式化器,覆盖pandas绘图的默认X轴格式,示例代码如下:

import matplotlib.pyplot as plt
import matplotlib.dates as mdates

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

# 设置X轴日期显示格式为年-月
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))
# 可根据数据跨度调整主刻度间隔,示例为每12个月显示一个刻度
ax.xaxis.set_major_locator(mdates.MonthLocator(interval=12))
# 可选:旋转X轴标签避免重叠
plt.xticks(rotation=45)

plt.tight_layout() # 自动调整布局防止标签被截断
plt.show()

如果你的数据跨度较小,也可以调整MonthLocator的interval参数为更小的值,比如3代表每3个月显示一个刻度。

问题2:添加衰退期灰色阴影

你原有代码的问题是starts和ends是布尔序列,不是对应区间的日期值,且逐行判断的逻辑错误。正确做法是先提取连续衰退期的起止日期,再批量绘制阴影,示例代码如下:

# 先识别连续衰退区间的起止点
df1['rec_start'] = (df1['USREC'] == True) & (df1['USREC'].shift(fill_value=False) == False)
df1['rec_end'] = (df1['USREC'] == True) & (df1['USREC'].shift(-1, fill_value=False) == False)

# 提取所有衰退区间的起止日期
rec_starts = df1.index[df1['rec_start']]
rec_ends = df1.index[df1['rec_end']]

# 绘制阴影
for start, end in zip(rec_starts, rec_ends):
    ax.axvspan(start, end, facecolor='lightgray', alpha=0.3, zorder=0)

这里zorder=0是为了让阴影显示在失业率折线下方,避免遮挡数据;alpha参数控制阴影透明度,可根据需求调整。


内容的提问来源于stack exchange,提问作者Rachel Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:18:04