複数のグラフを描画する際、ravel()を使うと制御が楽。
plt.subplots()
するとaxes
に二次元配列ができるため、for loop
でグラフを描くときネストしなければならないが、ravel()
で一次元配列にしてやれば、ネスト不要。
import pandas_datareader.data as web
import datetime
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()
dic = {'Unemployment rate':'UNRATE',
'USHY spread': 'BAMLH0A0HYM2',
'CPI':'CPIAUCSL',
'10 year treasury': 'DGS10',
'Federal Funds Rate': 'FEDFUNDS',
'Industrial Production Index':'INDPRO',
'Household Debt to GDP': 'HDTGPDUSQ163N',
'Real GDP': 'A191RL1Q225SBEA',
'WTI oil price': 'WTISPLC',
'VIX': 'VIXCLS',
'S&P500': 'SP500'}
source = 'fred'
start = datetime.datetime(2015, 1, 1)
end = datetime.datetime(2020, 5, 1)
h = ((len(dic)+1)//2)*4
fig, axes = plt.subplots(6,2, figsize = (15,h))
for ax, (ttl, symbol) in zip(axes.ravel(),dic.items()):
dt = web.DataReader(symbol,source, start, end)
ax.plot(dt)
ax.set_title(ttl)
ax.grid(True)
plt.tight_layout()
plt.savefig('FRED',bbox_inches="tight")