如何在Stata中绘制按p值标记不同散点形状的系数折线图
Stata 带显著性标记折线图实现步骤
你可以按照下方步骤完成绘图,首先处理原始p值字段转成数值型变量,之后为三个Beta序列分别生成对应的标记符号变量,最后叠加图层绘图即可。
步骤1:数据预处理
首先将带括号的p值清理为数值型,再根据显著性水平赋值标记类型:
* 注意:如果你的原始变量名包含横杠(如`p-value`、`Beta-2`),引用时需要用重音符号包裹,例如`` `p-value' `` * 清理p值变量,去掉括号转为数值 foreach var in pvalue pvalue2 pvalue3 { replace `var' = subinstr(`var', "(", "", .) replace `var' = subinstr(`var', ")", "", .) destring `var', replace } * 为每个Beta生成对应的标记符号:1=星形、2=圆形、3=方形,p≥0.1的留空不显示标记 gen mark1 = . replace mark1 = 1 if pvalue < 0.01 replace mark1 = 2 if pvalue >=0.01 & pvalue <0.05 replace mark1 = 3 if pvalue >=0.05 & pvalue <0.1 gen mark2 = . replace mark2 = 1 if pvalue2 < 0.01 replace mark2 = 2 if pvalue2 >=0.01 & pvalue2 <0.05 replace mark2 = 3 if pvalue2 >=0.05 & pvalue2 <0.1 gen mark3 = . replace mark3 = 1 if pvalue3 < 0.01 replace mark3 = 2 if pvalue3 >=0.01 & pvalue3 <0.05 replace mark3 = 3 if pvalue3 >=0.05 & pvalue3 <0.1
步骤2:叠加折线与散点标记绘图
直接在twoway命令中叠加折线层和对应显著性的散点层即可,用空散点单独生成显著性标记的图例:
twoway /// * 先画三条基础折线 line Beta Beta2 Beta3 Period, lc(navy maroon olive) lw(medthick medthick medthick) /// * 叠加Beta的三类显著性标记 scatter Beta Period if mark1==1, ms(star) mcolor(navy) legend_label(1 "Beta") /// scatter Beta Period if mark1==2, ms(circle) mcolor(navy) /// scatter Beta Period if mark1==3, ms(square) mcolor(navy) /// * 叠加Beta2的三类显著性标记 scatter Beta2 Period if mark2==1, ms(star) mcolor(maroon) legend_label(5 "Beta_2") /// scatter Beta2 Period if mark2==2, ms(circle) mcolor(maroon) /// scatter Beta2 Period if mark2==3, ms(square) mcolor(maroon) /// * 叠加Beta3的三类显著性标记 scatter Beta3 Period if mark3==1, ms(star) mcolor(olive) legend_label(9 "Beta_3") /// scatter Beta3 Period if mark3==2, ms(circle) mcolor(olive) /// scatter Beta3 Period if mark3==3, ms(square) mcolor(olive) /// * 生成显著性标记的专属图例(空散点不会在图上显示实际内容) scatteri . . , ms(star) mc(black) legend_label(13 "p<0.01") /// scatteri . . , ms(circle) mc(black) legend_label(14 "0.01≤p<0.05") /// scatteri . . , ms(square) mc(black) legend_label(15 "0.05≤p<0.1") /// * 调整坐标轴和图例样式 xlabel(1(1)4) xtitle("Period") ytitle("系数值") /// legend(order(1 5 9 13 14 15) row(2) position(6))
可选调整项
- 修改
lc()参数可调整三条折线的颜色,lw()参数可调整折线粗细 - 调整legend的
order参数可修改图例显示顺序,row()参数可修改图例排列行数
内容的提问来源于stack exchange,提问作者Alberto Alvarez
相关产品推荐
相关产品推荐

