Stata使用graph by()绘制子图的自定义调整问题咨询
Stata by()选项子图差异化配置方案
完整可运行代码
use http://www.stata-press.com/data/r13/wpi1.dta, clear g wpi10 = wpi * 100 rename (wpi wpi10) value= drop ln_wpi * 修正原代码reshape行的多余引号语法错误 reshape long value, i(t) j(variable) string g value2 = value - 25 replace value2 = . if variable == "wpi10" * 预计算子图中心坐标用于放置文本 sum t, meanonly local x_center = r(mean) sum value if variable == "wpi", meanonly local y_top_center = r(mean) sum value if variable == "wpi10", meanonly local y_bottom_center = r(mean) twoway (scatter value t if variable == "wpi", color(navy) legend(label(1 "value(wpi)"))) /// (scatter value2 t if variable == "wpi", color(cranberry) yaxis(2) legend(label(2 "value2(wpi)"))) /// (scatter value t if variable == "wpi10", color(forest_green) legend(label(3 "value(wpi10)"))) /// (text `y_top_center' `x_center' "A" if variable == "wpi", size(large) color(black)) /// (text `y_bottom_center' `x_center' "A" if variable == "wpi10", size(large) color(black)) /// , by(variable, cols(1) yrescale legend(pos(12)) ) /// ylabel(, angle(0) axis(1)) ylabel(, angle(0) axis(2))
各需求实现说明
- a) 让value2仅在顶部子图及对应图例显示:给value2的散点图层添加
if variable == "wpi"条件限制,仅在顶部wpi分组生效,底部wpi10分组无对应观测值自然不会展示该序列,图例也仅会展示存在的图层标签。 - b) 让顶部子图的value2使用右侧y轴展示:给value2对应的散点图层添加
yaxis(2)参数,即可将该序列绑定到右侧第二y轴,代码中额外对第二轴的刻度角度做了统一配置。 - c) 分别调整顶部、底部子图的配色:给两个分组的value散点图层分别添加分组条件判断,各自指定
color()参数即可实现独立配色,示例中顶部主序列用海军蓝、value2用蔓越莓红,底部序列用森林绿,可按需替换色值。 - d) 在两个子图的中心位置分别添加字母“A”:先通过汇总命令计算两个子图x轴和各自y轴的中位数作为中心坐标,再用
text()图层配合分组条件放置文本,可调整size()参数修改字母大小。
内容的提问来源于stack exchange,提问作者rpickmans
相关产品推荐
相关产品推荐

