python - Seaborn axvspan() 两行之间的阴影
问题描述
我无法使用 seaborn 和 pandas 数据框来遮蔽两个日期之间的区域。代码如下。我怎样才能做到这一点。我无法循环该功能。我不知道如何循环它。
import matplotlib.pyplot as plt
import seaborn as sns
import pandas_datareader.data as pdr
import pandas as pd
import datetime
import matplotlib.dates as mdates
start = datetime.datetime (2000,1,1)
end = datetime.datetime (2020,12,31)
df = pdr.DataReader(['FEDFUNDS','TERMCBPER24NS','TERMCBCCALLNS','T5YIFR','T10YIE'], 'fred', start, end)
df.columns = ['Effective Federal Funds Rate','Finance Rate on Personal Loans at Commercial Banks','Commercial Bank Interest Rate on Credit Card Plans',
'5-Year, 5-Year Forward Inflation Expectation Rate','10-Year Breakeven Inflation Rate']
fig, axes = plt.subplots(5,1, figsize=(20,25))
for ax, col in zip(axes, df.columns):
ax.axvspan(mdates.date2num(datetime.datetime(2007,1,12)), mdates.date2num(datetime.datetime(2009,6,1)), color='teal', alpha=0.5,
label='2008 Crisis')
ax.axvspan(mdates.date2num(datetime.datetime(2019,12,1)), mdates.date2num(datetime.datetime(2020,2,1)), color='orange', alpha=0.5,
label='Pandemic')
ax.set_title(col)
axes[0].set_title('Effective Federal Funds Rate')
sns.scatterplot(x='DATE', y='Effective Federal Funds Rate', data=df, s=50, ax=axes[0])
axes[1].set_title('Finance Rate on Personal Loans at Commercial Banks')
sns.scatterplot(x='DATE', y='Finance Rate on Personal Loans at Commercial Banks', data=df, s=50,ax=axes[1])
axes[2].set_title('Commercial Bank Interest Rate on Credit Card Plan')
sns.scatterplot(x='DATE', y='Commercial Bank Interest Rate on Credit Card Plans', data=df, s=50, ax=axes[2])
axes[3].set_title('5-Year, 5-Year Forward Inflation Expectation Rate')
sns.scatterplot(x='DATE', y='5-Year, 5-Year Forward Inflation Expectation Rate', data=df, s=50, ax=axes[3])
axes[4].set_title('10-Year Breakeven Inflation Rate')
sns.scatterplot(x='DATE', y='10-Year Breakeven Inflation Rate', data=df, s=50, ax=axes[4])
plt.tight_layout
plt.style.use('seaborn-whitegrid')
解决方案
我认为您上一个问题的答案已启用 axvspan,因为它会自动转换为 pandas 图中的时间序列。如果此代码仅包含 matplotlib,那么您将需要转换时间序列数据。看到这个。
import matplotlib.pyplot as plt
import seaborn as sns
import pandas_datareader.data as pdr
import pandas as pd
import datetime
import matplotlib.dates as mdates
start = datetime.datetime (2000,1,1)
end = datetime.datetime (2020,12,31)
df = pdr.DataReader(['FEDFUNDS','TERMCBPER24NS','TERMCBCCALLNS','T5YIFR','T10YIE'], 'fred', start, end)
df.columns = ['Effective Federal Funds Rate','Finance Rate on Personal Loans at Commercial Banks','Commercial Bank Interest Rate on Credit Card Plans',
'5-Year, 5-Year Forward Inflation Expectation Rate','10-Year Breakeven Inflation Rate']
fig, axes = plt.subplots(5,1, figsize=(20,25))
for ax, col in zip(axes, df.columns):
ax.axvspan(mdates.date2num(datetime.datetime(2007,1,12)), mdates.date2num(datetime.datetime(2009,6,1)), color='teal', alpha=0.5,
label='2008 Crisis')
ax.axvspan(mdates.date2num(datetime.datetime(2019,12,1)), mdates.date2num(datetime.datetime(2020,2,1)), color='orange', alpha=0.5,
label='Pandemic')
ax.set_title(col)
axes[0].set_title('Effective Federal Funds Rate')
sns.scatterplot(x='DATE', y='Effective Federal Funds Rate', data=df, s=50, ax=axes[0])
axes[1].set_title('Finance Rate on Personal Loans at Commercial Banks')
sns.scatterplot(x='DATE', y='Finance Rate on Personal Loans at Commercial Banks', data=df, s=50,ax=axes[1])
axes[2].set_title('Commercial Bank Interest Rate on Credit Card Plan')
sns.scatterplot(x='DATE', y='Commercial Bank Interest Rate on Credit Card Plans', data=df, s=50, ax=axes[2])
axes[3].set_title('5-Year, 5-Year Forward Inflation Expectation Rate')
sns.scatterplot(x='DATE', y='5-Year, 5-Year Forward Inflation Expectation Rate', data=df, s=50, ax=axes[3])
axes[4].set_title('10-Year Breakeven Inflation Rate')
sns.scatterplot(x='DATE', y='10-Year Breakeven Inflation Rate', data=df, s=50, ax=axes[4])
plt.tight_layout
plt.style.use('seaborn-whitegrid')
推荐阅读
- php - PHP 致命错误:未捕获的异常 'PDOException' 带有消息 'SQLSTATE[HY000]:一般错误:1210 mysqld_stmt_execute 的参数不正确
- vhdl - Vhdl 如何用定点做一个简单的二进制加法?
- unix - 如果已经有作业在运行,如何防止在 Kubernetes 中执行 Cronjob
- python - ImportError:无法导入名称“PKCS1_OAEP”
- php - 从根目录为插件文件夹运行 PHPUnit
- php - 获取 facebook 视频的 url 以下载它?
- css - 对齐工具栏中的元素
- max - 为什么声明为常量时的高度和宽度会给出默认值?
- neo4j - Neo4j 上的连接组件
- python - 保存屏幕上打印的内容