Stata连享会 主页 || 视频 || 推文 || 知乎 || Bilibili 站
温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
New!
lianxh
命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc
,ihelp
,rdbalance
,gitee
,installpkg
⛳ Stata 系列推文:
作者: 袁子晴 (香港大学)
邮箱: yzq0612@foxmail.com
目录
在 Stata 中绘制较为多个图层的叠加的复杂图表时,或者在已经绘制好的图表上进行二次编辑时,我们可以使用 addplot
命令来实现。该命令与 twoway
绘图命令的附加选项 addplot_option
的区别在于它是独立于原有绘图命令的,可以在原有绘图命令之后单独运行,其优势在于:
addplot
允许你在图形生成后向其添加元素;addplot
可以实现单一绘图命令中难以实现的效果(例如,包含多个子图的情况下自定义单个子图);addplot
还可以替代图形编辑器的一些功能。
首先通过 ssc install addplot
来安装外部命令 addplot
,其命令结构如下:
addplot [graphname] [numlist] [, nodraw] : twoway_plots
graphname
是需要修改的内存图的名称,若省略该选项,则默认使用当前内存中的图形;numlist
提供要单独修改的子图的编号,当修改 graph combine
或 by()
创建的图形时,命令 addplot
默认所有子图,但如果你只想修改第二和第三个子图,你可以输入:. addplot 2 3: ...
;nodraw
适用于对同一个图形多次使用 addplot
但不想每次都更新图形,因为如果在后续使用 addplot
时修改了绘图数据会改变之前的绘图结果,这一选项避免了这一情况;norescaling
阻止 addplot
命令重新编译坐标轴(以便保留坐标轴的标签和范围);legend(off)
避免添加多余的图例。twoway_plots
代表可以加入 Stata twoway
绘图命令
. sysuse auto, clear
. twoway scatter price mpg
. addplot: scatter price mpg if price>15000 | mpg>40, ///
msymbol(i) mlabel(make) ///
mlabposition(9) legend(off)
. addplot: pcarrowi 14000 23 15500 21.5 (3) "expensive car" ///
2000 38 5000 40.7 (6) "high mileage car"
第一个示例展示了 addplot
如何分别为已命名的图形添加标题:
sysuse auto
scatter price mpg, name(g1, replace)
scatter price weight, name(g2, replace)
addplot g1: , title(price by mpg)
addplot g2: , title(price by weight)
graph drop g1 g2
第二个示例展示了 addplot
如何修改现有的以 .gph
为后缀的图形文件:
sysuse auto
scatter price mpg
graph save mygraph.gph
graph drop Graph
graph use mygraph.gph
addplot mygraph: pcarrowi 14000 23 15500 21.5 "expensive car", legend(off)
graph drop mygraph
erase mygraph.gph
第三个示例展示了如何单独修改分组生成的子图:
sysuse auto
scatter price mpg, by(foreign)
addplot: , xline(21.3, lp(dash)) yline(6165, lp(dash)) norescaling
addplot 1: , xline(19.8) yline(6072) norescaling
addplot 2: , xline(24.8) yline(6385) norescaling
graph drop Graph
以上的三个示例来源于 help addplot
帮助文档,均是单击即可运行。
sysuse auto, clear
proportion rep if foreign==0 & rep78>=3
estimates store domestic
proportion rep if foreign==1 & rep78>=3
estimates store foreign
coefplot domestic foreign, vertical recast(bar) barwidth(0.3) fcolor(*.5) ///
ciopts(recast(rcap)) citop citype(logit) format(%9.2f) ///
addplot(scatter @b @at, ms(i) mlabel(@b) mlabpos(2) mlabcolor(black))
下图是与 coefplot
系数可视化命令的结合,添加数值作为标签,并绘制了置信区间:
sysuse auto, clear
proportion rep if foreign==0 & rep78>=3
estimates store domestic
proportion rep if foreign==1 & rep78>=3
estimates store foreign
coefplot domestic foreign, vertical recast(bar) ///
barwidth(0.3) fcolor(*.5) ///
ciopts(recast(rcap)) citop citype(logit) format(%9.2f) ///
addplot(scatter @b @at, ms(i) mlabel(@b) mlabpos(2) mlabcolor(black))
系数可视化命令 coefplot
不允许针对子图的 xline()
选项,因此我们可以在 coefplot
创建图形后使用addplot
来添加基准线:
sysuse auto, clear
logit foreign mpg trunk length turn
coefplot ., bylabel(Log odds) || ///
., bylabel(Odds ratios) eform || ///
, drop(_cons) nolabel byopts(xrescale)
addplot 1: , xline(0) norescaling
addplot 2: , xline(1) norescaling
同样地,我们可以为 coefplot
创建的子图用 addplot
分别添加 y 轴基准线:
scatter mpg turn, by(foreign) jitter(2) msymbol(Oh)
summarize mpg if foreign==0, meanonly
addplot 1: , yline(`r(mean)') norescaling
summarize mpg if foreign==1, meanonly
addplot 2: , yline(`r(mean)') norescaling
summarize mpg, meanonly
addplot: , yline(`r(mean)', lpattern(dash)) norescaling
如果根据数值大小分为高、中、低三组时,可以按照下面示例将分组情况更为直观地展示出来:
scatter mpg turn, jitter(2) msymbol(Oh)
addplot: (scatteri 10.0 52 10.0 53 19.5 53 19.5 52, recast(line) lp(l)) ///
(scatteri 20.5 52 20.5 53 29.5 53 29.5 52, recast(line) lp(l)) ///
(scatteri 30.5 52 30.5 53 40.0 53 40.0 52, recast(line) lp(l)), ///
graphregion(margin(r=11)) legend(off) norescaling ///
text(15 52.5 "low" 25 52.5 "medium" 35 52.5 "high", ///
orientation(rvertical))
在对变量进行描述性统计分析时,通常会绘制累计概率分布图 (cumulative distribution plots),进一步地添加纵向维度的边缘直方图 (cumulative distribution plots) 有助于我们直观地观察数据堆叠情况,下面的示例为我们展示了如何实现这一过程:
sysuse auto,clear
set scheme sj
quantile mpg, rlopts(lc(none)) ms(oh) yla(, ang(h))
count if mpg < .
egen prob = total(1/`r(N)'), by(mpg)
egen tag = tag(mpg)
generate nprob = -prob
quantile mpg, rlopts(lc(none)) ms(oh) yla(, ang(h)) ///
addplot(spike nprob mpg if tag, horizontal) legend(off)
这个例子由连玉君老师提供,源于 Stata 假期班-高级班 的课件。该例展示了非参数估计中最基本的「分段求取均值」的过程。
第一步:通过模拟的方式产生数据。数据生成过程 (DGP) 如下:
为了展示不同样本数下的结果,生成了两组样本,分别为
第二步:将样本等分为 8 组,用 egen
命令计算每组的均值,进而使用 twoway line
绘制基础图形 (各个区间的均值线)。为了提升可视化,分别将单数组和双数组的散点图设定为红色 (red) 和蓝色 (blue),这需要通过循环语句来完成,相当于绘制了 8 张 (共 8 组分段数据) 透明的图片。在此过程中,使用 addplot
命令将这些图片「覆盖」在基础图片上即可完成整个图片的绘制工作。
//----------------- DGP - Simulate datasets--------
//Full sample, N=400
clear
set seed 135
set obs 400
gen x = runiform()*10 // x~U[0,1]
gen e = rnormal()*(0.05*x) // e~N(0, 0.05x)
gen y = sin(0.18*_pi*x) + e
save "NP_sim01.dta", replace
//Subsample, N=40
set seed 1
sample 40 , count
save "NP_sim02.dta", replace
//-------------------------------------------------
//分段求均值
*-样本1:N = 400
use "NP_sim01.dta", clear
twoway scatter y x, msize(*0.2)
*-样本2:N = 40
use "NP_sim02.dta", clear
twoway scatter y x, msize(*0.2)
sort x
gen K = group(8) // 把样本等分成 K 组
bysort K: egen ymean = mean(y)
list x y K ymean, sepby(K)
twoway scatter ymean x, msymbol(+) msize(*0.4)
//图示:分段均值和散点图
//-------------------------------------b---------------
twoway line ymean x if K==1, msize(*1.2) lcolor(red) //scheme(s1mono)
forvalues k = 1(2)7{
addplot: line ymean x if K==`k', lcolor(red) legend(off) //recast(area)
addplot: scatter y x if K==`k', msize(*1.2) msymbol(+) mcolor(red) legend(off)
}
forvalues k = 2(2)8{
addplot: line ymean x if K==`k', lcolor(blue) legend(off)
addplot: scatter y x if K==`k', msize(*1.2) msymbol(oh) mcolor(blue) legend(off)
}
//-------------------------------------o---------------
输出图片效果如下:
最后,不知你是否觉得这个图片的风格很清爽,完全不同于 Stata 默认的粗笨风格。若想实现这个风格,只需在绘图之前执行如下命令,将绘图模板设定为 white_tableau
风格即可。
有关绘图模板的设定方法,参见往期推文
. ssc install schemepack, replace //安装white_tableau 模板
. set scheme white_tableau //设定绘图风格为white_tableau
若需重设为 Stata 默认绘图风格,可以按需执行如下两条命令之一:
. set scheme s2color // Stata 默认, 彩色
. set scheme s2mono // Stata 默认, 黑白
Stata 自带模板 s1momo 的输出效果
coefplot
: Plotting regression coefficients and other estimates in Stata, -Link-
Note:产生如下推文列表的 Stata 命令为:
lianxh
安装最新版lianxh
命令:
ssc install lianxh, replace
免费公开课
最新课程-直播课
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 | 文本分析、机器学习、效率专题、生存分析等 | |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
⛳ 课程主页
⛳ 课程主页
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会-常见问题解答:
✨ https://gitee.com/lianxh/Course/wikis
New!
lianxh
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh