I want to be able to replicate the following plot.
x 轴上有时间,y 轴上有 GDP。
GDP 线只是每日时间历史(无论其值如何),而衰退数据具有以下结构(从 1/1/59 到今天,两个变量 CGD 和 Recession 共享相同的每日频率):
Date Regime
1 1/1/59 Normal
2 2/1/59 Normal
3 3/1/59 Normal
4 4/1/59 Normal
5 5/1/59 Normal
6 6/1/59 Normal
...
14 2/1/60 Normal
15 3/1/60 Normal
16 4/1/60 Recession
17 5/1/60 Recession
18 6/1/60 Recession
19 7/1/60 Recession
20 8/1/60 Recession
21 9/1/60 Recession
22 10/1/60 Recession
23 11/1/60 Recession
24 12/1/60 Recession
25 1/1/61 Recession
26 2/1/61 Normal
27 3/1/61 Normal
只有衰退部分必须用浅色绘制。
有人可以帮忙吗?
谢谢。路易吉
BigBen 的评论给出了使用的一个很好的提示plt.axvspan
。正如您所指出的,您需要指定一个范围。特别是如果您有日期范围(并且每个日期只有一个值),您可以通过以下方式指定范围(date, date+1day)
.
plt.axvspan(day, day + datetime.timedelta(days=1), color="grey", alpha=0.5)
这是一个完整的示例:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import datetime
import random
regime_choices = ["Normal"]*9+["Recession"]
#create sample data and dataframe
datelist = pd.date_range(start="1959-01-01",end="1960-01-01").tolist()
df = pd.DataFrame(datelist, columns=["Date"])
regime = [random.choice(regime_choices) for i in range(len(datelist))]
df["Regime"] = regime
#plot command, save object in variable
plt.plot(df["Date"], np.arange(len(df)))
#filter out recession dates
recessions = df.loc[df["Regime"] == "Recession", 'Date']
#plot axvspan for every recession day
for day in recessions:
plt.axvspan(day, day + datetime.timedelta(days=1), color="grey", alpha=0.5)
plt.show()
Result:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)