You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将共享Y轴的4组Stata统计图合并为单Y轴横向组合图?

问题需求

我有4张统计图,展示同一变量content_knowledge在不同描述变量(Location、Induction、CPD、Gender)下的均值与误差棒。由于它们共享Y轴,我希望将这4张图合并为仅显示1个Y轴的组合图,同时实现类似横向排列效果,扩展绘图区域,将四个分组的分类显示在统一的X轴上。

现有生成单图及组合图的代码

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) 

尝试横向排列的代码

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

核心疑问

能否实现横向排列的组合图,仅保留一个共用Y轴,同时扩展绘图区域,将Location、Induction、CPD、Gender的分类显示在扩展的X轴上?


解决方案

直接用grc1leg很难实现统一X轴的效果,更合理的思路是先合并所有分组的统计结果,再一次性绘制横向排列的多组条形图,而非先画单图再拼接。具体步骤如下:

  1. 批量计算各分组的均值、上下置信限并合并数据集
* 初始化空数据集存储所有统计结果
clear
set obs 0
gen group = ""
gen category = ""
gen mean_ck = .
gen upper = .
gen lower = .

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
        * 添加分组标识
        gen group = "`var'"
        rename `var' category
        append using _temp
        save _temp, replace
    restore
}
* 加载合并后的数据集
use _temp, clear
erase _temp.dta
  1. 调整X轴位置,避免不同组的条形重叠
* 为每个分组分配X轴偏移量
encode group, gen(group_num)
gen x_pos = group_num * 2 + _n - group_num // 可根据分类数量调整偏移系数
  1. 绘制统一的横向组合图
twoway (bar mean_ck x_pos, by(group) barwidth(0.6) color(navy)) ///
       (rcap lower upper x_pos, lcolor(black)) ///
       (scatter mean_ck x_pos, msymbol(none) mlabel(mean_ck) mlabposition(1)), ///
       title("Content Knowledge of Teachers") ///
       ylabel(0(10)55, nogrid) ytitle("Content Knowledge") ///
       xlabel( ///
           1.5 "Location" ///
           3.5 "Induction" ///
           5.5 "CPD" ///
           7.5 "Gender" ///
       , noticks) ///
       xsc(r(0.5 8.5)) ///
       legend(off) ///
       graphregion(margin(l=20 r=20 t=10 b=20)) ///
       name(combined_ck, replace)

说明

  • 该方法直接生成单张图,天然共用Y轴,X轴可清晰区分不同分组及其分类
  • 可根据实际分类数量调整x_pos的计算系数,避免条形重叠
  • 若要保留原单图样式,可调整barwidth、颜色、标签位置等参数

内容的提问来源于stack exchange,提问作者Shubhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 16:56:00