Stata箱线图如何在对应分组顶部添加样本量标注
Stata双分层箱线图标注组样本量的实现方案
Stata的graph box本身不支持自动在分组顶部展示样本量,原代码中写入的bar(samplesize)是条形图(graph bar)的专属选项,放在箱线图代码中会被Stata直接忽略。通过「预计算分组统计值+叠加精准位置文本标注」的方式,可完全匹配双over分组的坐标位置,实现对应分组顶部标注样本量的需求,具体可运行操作如下:
- 第一步:预计算每组的标注坐标与文本
先按照绘图的分组维度,计算每个交叉组的样本量、组内因变量最大值,自动匹配绘图时的x轴位置,全程不需要手动数分组位置:
preserve * 按两个over分组维度,计算各组样本量、组内因变量最大值 collapse (count) n_obs = igg1ugml_log10 /// (max) y_group_max = igg1ugml_log10, /// by(female_sex age_groups) * 排序规则必须和绘图代码中over的顺序完全一致,避免标注错位 sort female_sex age_groups * 自动生成每个组对应的x轴坐标(Stata双over分组的x轴从左到右依次排序) gen x_pos = _n * 计算标注的y轴位置:在组内最大值上方留固定偏移,不遮挡箱线元素 gen y_label = y_group_max + 0.15 * 生成标注文本,可按需调整格式 gen label_content = "n = " + string(n_obs, "%9.0f") * 保存标注数据为临时文件,供绘图调用 save "group_label_temp.dta", replace restore
- 第二步:修改绘图代码叠加标注
移除原代码中无效的bar(samplesize)选项,适当拉高y轴范围给顶部标注留足空间,通过addplot功能叠加预先算好的标注:
graph box igg1ugml_log10, over(female_sex) over(age_groups) /// graphregion(color(white)) /// title(Anti-EPEC IgG1 (ug/ml) in boys and girls) asyvars /// ylabel(2.69897 "500" 3 "1,000" 3.3 "2000" 3.69 "5000" 3.95 "9000") /// yscale(range(2.5 4.2)) // 扩大y轴上限,防止顶部标注被截断 /// 叠加样本量标注 addplot using "group_label_temp.dta", /// text(y_label x_pos label_content, size(small) place(n)) /// legend(off)
- 实操调整提示
- 命令安装:如果运行
addplot提示命令不存在,可输入ssc install addplot, replace完成安装 - 位置对齐:计算x_pos时的排序顺序,必须和
over()选项的排列顺序一致,否则标注会错位到相邻分组上方 - 偏移调整:y轴偏移量(代码中的0.15)可根据实际数据范围修改,保证文字不遮挡箱线、上须或离群值
- 版本兼容:该方法适配所有Stata主流版本,不需要依赖高版本的专属功能
- 命令安装:如果运行
内容的提问来源于stack exchange,提问作者Carol Rizkalla
相关产品推荐
相关产品推荐

