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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:54:05