Stata绘图:bgshade - 在图形中加入经济周期阴影

作者:张伟广(东北财经大学) | 知乎 | | 码云 | github

Stata连享会 精彩推文1 || 精彩推文2


1. 添加经济周期阴影不再难:bgshade 命令

做宏观分析时,我们经常需要在时序图中加入反应经济周期的阴影,以映衬经济波动对我们所关注的变量的影响。对于多数 stata 用户而言,这是个很有挑战性的工作。

不过,今天我们给大家介绍的这个命令,不但可以非常快捷的完成这个颇具挑战的任务,而且还能绘制各种精美的阴影,让阴影不再是单调的灰色。

这个命令就是 bgshade,它既可以使用 NBER 提供的经济周期划分时间节点 ( 数据来源于:https://fred.stlouisfed.org/series/USREC ),另一方面,也可以根据用户自行设定的虚拟变量来添加阴影区域,这对于研究中国经济周期的影响非常有帮助。

2. Stata 范例

命令语法

bgshade x/yvar [if] [in] [, options]
  • 说明:
    1. 要求 x 和 y 变量应当为整数,以便于添加阴影区域。
    2. options 为自定义的选项,可选择包括: 添加二维图 (twoway)、设定阴影范围 (shaders)、阴影属性 (sstyle),以及 legendoldshadershorizontal 等(后面逐一实例介绍)。
    3. NBER options 包括 quartermonthweekday等时间选项。

2.2 具体实例

范例1:基本应用

sysuse gnp96, clear  // 调入数据
format date %tq       // 设定 date 变量为季度数据格式
bgshade date if date>=yq(1970,1),   ///
   legend shaders(quarter)          ///
   twoway(line gnp96 date if date>=yq(1970,1),  ///
          title("GNP") lcolor(blue*1.2))
Stata绘图:bgshade - 在图形中加入经济周期阴影_第1张图片

说明:

  1. 这幅精美的图片实际上是由两个图层叠加而成的:bgshade date 定义了第一个图层,用于绘制反映经济周期的阴影,bgshade 命令会自动比对用户指定的日期与 NBER 发布的经济周期时点,对于重叠的日期范围,会纵向绘制一个阴影区域。twoway() 则定义了第二个图层,用于绘制图形中的蓝色时序图。
  2. if date>=yq(1970,1) 语句的作用在于界定 date 的取值范围为 1970 年第 1 季度之后的时间段;
  3. 附加 legend 选项,则在图形底部呈现图例,默认情况下则不呈现图例;
  4. twoway() 选项用于设定时序图的外观,包括图形的种类 (line, connected 等)、图形的标题(title())、线条的颜色 (lcolor(), blue*1.2 表示线条的颜色是标准蓝色的 1.2 倍,即为深蓝色) 等。我们可以将其视为一个图层,至于图层中的内容及其设定方式,与普通的 stata 二维图没有任何差异。
  5. 以季度为单位的基础上添加经济衰退的阴影区域,使用 twoway 作图显示;使用 titlelcolor 设定“表头”和“颜色”。

范例2: NBER 经济衰退期的全部时间系列

*-实时下载最新的 NBER 经济周期标示数据
copy "https://fred.stlouisfed.org/graph/fredgraph.xls?chart_type=line&recession_bars=off&log_scales=&bgcolor=%23e1e9f0&graph_bgcolor=%23ffffff&fo=Open+Sans&ts=12&tts=12&txtcolor=%23444444&show_legend=yes&show_axis_titles=yes&drp=0&cosd=1854-12-01&coed=2017-10-01&height=450&stacking=&range=Custom&mode=fred&id=USREC&transformation=lin&nd=1854-12-01&ost=-99999&oet=99999&lsv=&lev=&mma=0&fml=a&fgst=lin&fgsnd=2009-06-01&fq=Monthly&fam=avg&vintage_date=&revision_date=&line_color=%234572a7&line_style=solid&lw=2&scale=left&mark_type=none&mw=2&width=968"  aa.xls, replace
import excel "aa.xls", sheet("FRED Graph") ///
       cellrange(A11:B1966) firstrow clear
rename observation_date date
gen edate = date(date, "YMD")  //转化为“年月日”
gen month= mofd(edate) //保留到“年月”
format month %tm  //设定为月份数据格式
rename month date1

bgshade date1, twoway(line usrec date1,  title("USREC") lcolor(red*1.2))
Stata绘图:bgshade - 在图形中加入经济周期阴影_第2张图片

说明:

  1. 使用 date() 命令将日期数据转化为 stata 的“年月日”格式,再使用 mofd() 命令保留到“年月”格式;
  2. 同上例一样,使用 bgshade 命令,画出NBER最新给出的美国经济周期的衰退波动标识线。
  3. 以月度为单位的,使用 twoway 命令作图显示,以 title 设定表头,以 lcolor 设定颜色为红色。
drop _all
set obs 2000
gen date = _n-1280
format date %tm
gen series = sqrt(_n)+runiform()
gen series2 = series*runiform()/2
bgshade date, shaders(month) ///
   twoway(line series date,  ///
          title("All Monthly Recessions"))
Stata绘图:bgshade - 在图形中加入经济周期阴影_第3张图片

说明:

时序图以月份为单位,为 NBER 提供的全部时间区间添加经济衰退阴影区域。

范例3: 所有默认着色选项

drop _all
set obs 12
gen date = _n-1
gen res1 = inlist(date,4,5,6,7,8,9)
gen res2 = inlist(date,2,3,4,5)
gen res3 = inlist(date,4,9,10,11,12)
gen res4 = inlist(date,5,6,10,11)
gen line1 = sqrt(_n)
gen line2 = _n*_n/20
bgshade date, shaders(res1 res2 res3 res4)  ///
   twoway(   line line1 date ||             ///  
          scatter line2 date, xlab(-2(2)14) ///
   title("All default shading colors and patterns"))
Stata绘图:bgshade - 在图形中加入经济周期阴影_第4张图片

范例4: 使用 twoway 画图命令的其他选项

bgshade date, shaders(res1 res2 res3 res4) ///
   twoway(line line1 date, lcolor(magenta) || (sc line2 date, msize(huge)), xlab(-2(2)14) ///
   title("Using extra options in twoway")) 
Stata绘图:bgshade - 在图形中加入经济周期阴影_第5张图片

范例5: 同时使用自定义和 NBER 着色器

bgshade date, shaders(quarter res2 res3 res4) ///
   twoway(line line1 date || sc line2 date, xlab(-2(2)14) ///
   title("Using custom and NBER shaders") ///
   subtitle("We recommend putting nber shaders first because it looks best"))
Stata绘图:bgshade - 在图形中加入经济周期阴影_第6张图片

范例6: sstyle 选项

bgshade date, shaders(res2 res3 res4) ///
  sstyle(noextend lcolor("255 0 0" green blue) lpattern(_ - -_)) ///
  twoway(line line1 date || sc line2 date, xlab(-2(2)14) ///
  title("Using some sstyle options"))
Stata绘图:bgshade - 在图形中加入经济周期阴影_第7张图片

说明:

sstyle 命令是为阴影区域设置各种线条样式选项,主要包括 axisstylelstylenoextendlpatternlwidthlcolor 等。如本例中 noextend 设定为从绘图区域的边缘作延伸线、 lpattern 设定线条的图案。(具体使用在 stata 官方 added_line_options 有详细说明)


范例7: legend 选项

lab var res1 "Shader 1"
lab var res2 "Shader 2"
bgshade date, shaders(res1 res2 res3 res4) legend ///
  twoway(line line1 date || sc line2 date, xlab(-2(2)14) ///
  title("Add shaders to the legend")) 
Stata绘图:bgshade - 在图形中加入经济周期阴影_第8张图片

说明:

legend 在图例中包含阴影区域,且是在 twoway 命令之前将着色器添加到图例,这与 twoway 的子选项是不同的。


范例8: legend 的综合使用

bgshade date, shaders(res1 res2 res3 res4) legend ///
   twoway(line line1 date || sc line2 date, xlab(-2(2)14) ///
   title("Using order legend suboption") ///    
   legend(order(5 "Square Root of N" 6 "N Squared over 20" 2 "Res2" 4 "Res4") cols(2)))
Stata绘图:bgshade - 在图形中加入经济周期阴影_第9张图片

范例9: 超过 4 种着色器的例子

drop res*
forvalues ii = 1/8 {
    gen res`ii' = _n == `ii'+2
    }
        
bgshade date, shaders(res1 res2 res3 res4 res5 res6 res7 res8) ///
  sstyle(lpattern( l _ l _ l _ l _) lcolor(green blue red magenta orange navy "255 0 0" eltgreen)) ///
  twoway(line line1 date || sc line2 date, xlab(0(1)12) ///
  title("More than 4 shaders"))
Stata绘图:bgshade - 在图形中加入经济周期阴影_第10张图片

范例10: 设定带宽使阴影区间更优美

bgshade date, shaders(res1 res2 res3 res4 res5 res6 res7 res8) ///
  sstyle(lwidth(10) ///
  lpattern( l _ l _ l _ l _) lcolor(green blue red magenta orange navy "255 0 0" elt green)) ///
  twoway(line line1 date || sc line2 date, xlab(0(1)12) ///
  title("Changing all widths"))
Stata绘图:bgshade - 在图形中加入经济周期阴影_第11张图片

范例11: 分别设定每个阴影区间的宽度

bgshade date, shaders(res1 res2 res3 res4 res5 res6 res7 res8) ///
  sstyle(lwidth(1 4 10 25 1 3 14 7) ///
  lpattern( l _ l _ l _ l _) lcolor(green blue red magenta orange navy "255 0 0" elt green)) ///
  twoway(line line1 date || sc line2 date, xlab(0(1)12) ///
  title("Changing individual widths"))
Stata绘图:bgshade - 在图形中加入经济周期阴影_第12张图片

范例12: 阴影区域延伸的例子(同样适用于 oldshaders 选项)

gen res = _n < 3 | _n > 10
        
bgshade date, shaders(res) sstyle(noxextend(100)) ///
   twoway(line line1 date, title("Too hot")) oldshaders
bgshade date, shaders(res) sstyle(noxextend(-100)) ///
   twoway(line line1 date, title("Too cold")) oldshaders
bgshade date, shaders(res) sstyle(noxextend(60)) ///
   twoway(line line1 date, title("Just right")) oldshaders
Stata绘图:bgshade - 在图形中加入经济周期阴影_第13张图片

Stata绘图:bgshade - 在图形中加入经济周期阴影_第14张图片

Stata绘图:bgshade - 在图形中加入经济周期阴影_第15张图片

说明:

图1设定过窄,图2设定过宽,图3设定较为合适。


范例13:horizontal 选项,即水平添加阴影区域的例子

gen yvar = _n
replace res = yvar > 3 & yvar < 5
replace res2 = yvar > 5 & yvar < 7
bgshade yvar, shaders(res res2) ///
   twoway(line yvar date) horiz
Stata绘图:bgshade - 在图形中加入经济周期阴影_第16张图片

关于我们

  • Stata 连享会(公众号:StataChina)】由中山大学连玉君老师团队创办,旨在定期与大家分享 Stata 应用的各种经验和技巧。
  • 公众号推文同步发布于 CSDN-Stata连享会 、-Stata连享会 和 知乎-连玉君Stata专栏。可以在上述网站中搜索关键词StataStata连享会后关注我们。
  • 点击推文底部【阅读原文】可以查看推文中的链接并下载相关资料。
  • Stata连享会 精彩推文1 || 精彩推文2

联系我们

  • 欢迎赐稿: 欢迎将您的文章或笔记投稿至Stata连享会(公众号: StataChina),我们会保留您的署名;录用稿件达五篇以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。
  • 意见和资料: 欢迎您的宝贵意见,您也可以来信索取推文中提及的程序和数据。
  • 招募英才: 欢迎加入我们的团队,一起学习 Stata。合作编辑或撰写稿件五篇以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。
  • 联系邮件: [email protected]

往期精彩推文

  • Stata连享会推文列表1
  • Stata连享会推文列表2
  • Stata连享会 精彩推文1 || 精彩推文2
    Stata绘图:bgshade - 在图形中加入经济周期阴影_第17张图片

Stata绘图:bgshade - 在图形中加入经济周期阴影_第18张图片
欢迎加入Stata连享会(公众号: StataChina)

你可能感兴趣的:(Stata绘图:bgshade - 在图形中加入经济周期阴影)