将图形与公共 y 轴组合

问题描述 投票:0回答:1

我有 4 个图表,提供同一变量 (content_knowledge) 在不同描述性变量上的平均值和误差线。由于它们都共享一个共同的 y 轴,因此我想创建 4 个图表的组合,这样我就有一个仅显示 1 个 y 轴的图表。

用于创建 4 个图形和组合的代码如下:

foreach var in Location Induction CPD Gender {
    
    preserve
    
drop if unique_teach_id==""

statsby mean_ck=r(mean) upper=r(ub) lower=r(lb), by(`var') clear : ci mean content_knowledge 
format mean_ck %9.3g

twoway (bar mean_ck `var', barwidth(0.3)) ///
   (rcap lower upper `var') ///
   (scatter mean_ck `var', msymbol(none) mlabel(mean_ck) mlabposition(1)), ///
   legend(off) title("`var'") saving(`var'_ck, replace) ///
   ylabel(0(10)55) xla(minmax,valuelabel) xtitle("") ytitle("")
       
  restore

}

grc1leg Location_ck.gph Induction_ck.gph CPD_ck.gph Gender_ck.gph , ///
title("Content Knowledge of Teachers") ycommon imargin(2 2 0 2) ///
graphregion(margin(l=22 r=22)) name(sk_combine) 

这会产生这个图表here

我尝试了 grc1leg 命令并指定 row(1) ,如下所示:

grc1leg Location_ck.gph Induction_ck.gph CPD_ck.gph Gender_ck.gph , ///
title("Content Knowledge of Teachers") row(1) iscale(1)

这会产生图表here

那么,有没有一种方法可以将图 2 中的图形组合起来,但只有一个公共 y 轴和扩展图形空间,并在扩展 x 轴上显示位置、归纳、CPD 和性别这两个选项?

谢谢

graph stata
1个回答
0
投票

这里没有数据示例来使问题成为可重现的示例。

这里有一些假数据和一种方法。对于意味着所有接近 50% 的条形图都只是浪费空间。

* faking data 
clear 
set seed 2803 
set obs 500
gen content_knowledge = 100 * runiform() 

foreach var in Location Induction CPD Gender {
    gen `var' = runiformint(0,1) 
    label values `var' `var'
}

label def Location 0 urban 1 rural
label def Induction 0 no 1 yes
label def CPD 0 no 1 yes 
label def Gender 0 male 1 female 

* start analysis 
foreach var in Location Induction CPD Gender {    
     
statsby mean_ck=r(mean) upper=r(ub) lower=r(lb), by(`var') saving(`var', replace) : ci mean content_knowledge 

} 

* ad hoc code 
use Location, clear 
append using Induction CPD Gender 

gen xgroup = ceil(_n/2)
label def xgroup 1 Location 2 Induction 3 CPD 4 Gender 
label val xgroup xgroup 
 
gen xaxis = xgroup + _n - 1  
label def xaxis 1 "`: label (Location) 0'", add 
label def xaxis 2 "`: label (Location) 1'", add 
label def xaxis 4 "`: label (Induction) 0'", add 
label def xaxis 5 "`: label (Induction) 1'", add 
label def xaxis 7 "`: label (CPD) 0'", add 
label def xaxis 8 "`: label (CPD) 1'", add 
label def xaxis 10 "`: label (Gender) 0'", add 
label def xaxis 11 "`: label (Gender) 1'", add 
label val xaxis xaxis 

drop Location Induction CPD Gender 
list 

scatter mean_ck xaxis || rcap lower upper xaxis, xla(1/2 4/5 7/8 10/11, valuelabel noticks) ///
xmla(1.5 "Location" 4.5 "Induction" 7.5 "CPD" 10.5 "Gender", tlength(*5) tlc(none) labsize(medium)) ///
xsc(r(0.5 11.5)) xtitle("") legend(off) title(Content Knowledge of Teachers) 

© www.soinside.com 2019 - 2024. All rights reserved.