Stata标注技巧:用for循环批量画图,标注相应文字

1.引言

如题,想用for循环批量输出结果,输出标题/label一般暂时使用数值,但结果不太直观。如何将数值对应的文字作为label或title?

我们考虑以下场景,hy2是国民经济行业分类代码。现在想要绘制每一个行业的出口额的时间趋势图。

hy2hy中文名hy2hy中文名
13农副食品加工业29橡胶和塑料制品业
14食品制造业30非金属矿物制品业
15酒、饮料和精制茶制造业31黑色金属冶炼和压延加工业
16烟草制品业32有色金属冶炼和压延加工业
17纺织业33金属制品业
18纺织服装、服饰业34通用设备制造业
19皮革、毛皮、羽毛及其制品和制鞋业35专用设备制造业
20木材加工和木、竹、藤、棕、草制品业36汽车制造业
21家具制造业37铁路、船舶、航空航天和其他运输设备制造业
22造纸和纸制品业39计算机、通信和其他电子设备制造业
23印刷和记录媒介复制业40仪器仪表制造业
24文教、工美、体育和娱乐用品制造业41其他制造业
25石油、煤炭及其他燃料加工业42废弃资源综合利用业
26化学原料和化学制品制造业43金属制品、机械和设备修理业
27医药制造业44电力、热力生产和供应业
28化学纤维制造业45燃气生产和供应业

我们要做的是:将贸易额回归至时间虚拟变量上,考察lnv的时间趋势,使用如下命令

  • 回归命令
*****回归*****
capture{
forv i = 13/45{
    reghdfe lnv i.year if hy2 == `i', noa vce(r)
	eststo fit`i'
}
}
  • 画图命令
*****画图*****
forv i = 39/45{
#d ;
coefplot 
  (fit`i',c(l) label("行业`i'") lp(dash) lc(black) mc(black) ms(smcircle_hollow) offset(-0.07))  
  , vertical 
  drop(_cons) byopts(xrescale) 
  xlabel(1 "2008"  2"2009"  3"2010" 4"2011" 5"2012" 6"2013" 7"2014" 8"2015")
  graphregion(color(white))
  legend(size(small) col(3))
  ;
#d cr
graph export "C:\Users\Allen\Desktop\output_temp\hy`i'.png", as(png) name("Graph") replace
}

如果直接循环绘制时间趋势图,得到如下图结果。发现label是数字,不太直观。
循环结果——数字标注(不直观)

我们想要用中文标注:结果如下
循环结果——文字标注(直观)

如何把数字对应的行业”文字“作为label加到图中?

2.数据处理过程

(1)使用标量储存行业代码和行业名称

在这里插入图片描述

preserve
keep hy2*
duplicates drop hy2,force
global length = _N
forv i = 1/$length {
	local j = hy2 in `i'
	su hy2 in `i',d
	sca int`j' = r(mean)
	sca s`j' = hy2_name in `i'
}
restore

生成了标量s13~s45 用于储存行业代码编号
生成了标量int13~int45 储存行业代码名称

执行上述代码,sca list得到如下结果
在这里插入图片描述
在这里插入图片描述

(2)记录行业代码的首尾

su hy2,d
global lower_hy2 = r(min)
su hy2,d
global upper_hy2 = r(max)

在这里插入图片描述

(3)循环回归,并保存结果

forv i = $lower_hy2/$upper_hy2{
   	cap reghdfe lnv i.year if hy2 == `i', noa vce(r)
	cap eststo fit`i'
}

(4)循环画图

forv i = $lower_hy2/$upper_hy2{
	cap local hy = int`i'
	cap local gamma = s`i'
	capture{
		#d ;
		coefplot 
		  (fit`i',c(l) label(`hy':`gamma') lp(dash) lc(black) mc(black) ms(smcircle_hollow) offset(-0.07))  
		  , vertical 
		  drop(_cons) byopts(xrescale) 
		  xlabel(1 "2008"  2"2009"  3"2010" 4"2011" 5"2012" 6"2013" 7"2014" 8"2015")
		  graphregion(color(white))
		  legend(size(small) col(3))
		  ;
		#d cr
	graph export "$path_output\hy`i'_`gamma'.png", as(png) name("Graph") replace
	}
	}

由此,我们就得到了中文label的时间趋势图
循环结果——文字标注(直观)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mengke25

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值