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

如何在Stata 13.1中绘制多组叠加的predicted_response曲线?

解决Stata 13.1中多组预测值合并绘图的问题

嘿,我来帮你搞定这个把24/48/72小时的预测值和观测值放到同一图表里的问题!你现在生成三个独立图表的原因很简单——每次单独调用gr7命令,Stata都会为每个命令生成一个全新的图表。要把它们合并到同一坐标系、用不同颜色区分,我们可以用Stata的twoway命令来整合所有绘图系列,具体方法如下:

方法一:直接在twoway中添加多组绘图元素

这种方法最直接,把每个小时组的预测线和观测点都作为独立的绘图元素加入同一个twoway命令,为每组设置不同颜色:

twoway ///
    // 24小时组:预测线+观测点,蓝色
    (line predicted_response Concentration if Hours==24, c(l.) color(blue)) ///
    (scatter Response Concentration if Hours==24, s(iO) color(blue)) ///
    // 48小时组:预测线+观测点,红色
    (line predicted_response Concentration if Hours==48, c(l.) color(red)) ///
    (scatter Response Concentration if Hours==48, s(iO) color(red)) ///
    // 72小时组:预测线+观测点,绿色
    (line predicted_response Concentration if Hours==72, c(l.) color(green)) ///
    (scatter Response Concentration if Hours==72, s(iO) color(green)) ///
    // 图表设置:坐标轴和图例
    , xlab ylab legend( ///
        label(1 "24h 预测值") label(2 "24h 观测值") ///
        label(3 "48h 预测值") label(4 "48h 观测值") ///
        label(5 "72h 预测值") label(6 "72h 观测值") ///
        cols(2) // 图例分成2列,避免太拥挤
    )

代码说明:

  • ///是Stata的换行续行符,让代码更易读
  • 每个(line ...)和(scatter ...)对应一组绘图元素,用if Hours==X筛选数据
  • color()参数指定每组的颜色,你可以换成Stata支持的任意颜色(比如cranberry、navy、orange等)
  • legend()里的label()用来给每个绘图元素设置清晰的标签,cols(2)让图例排版更美观

方法二:先拆分变量再绘图(适合多组数据场景)

如果之后可能需要添加更多时间组,先把变量按Hours拆分生成新变量会更方便:

// 按Hours拆分预测值和观测值,生成新变量
separate predicted_response, by(Hours) prefix(pred_)
separate Response, by(Hours) prefix(obs_)

// 用新变量绘图
twoway ///
    (line pred_24 Concentration, c(l.) color(blue)) ///
    (scatter obs_24 Concentration, s(iO) color(blue)) ///
    (line pred_48 Concentration, c(l.) color(red)) ///
    (scatter obs_48 Concentration, s(iO) color(red)) ///
    (line pred_72 Concentration, c(l.) color(green)) ///
    (scatter obs_72 Concentration, s(iO) color(green)) ///
    , xlab ylab legend( ///
        label(1 "24h 预测值") label(2 "24h 观测值") ///
        label(3 "48h 预测值") label(4 "48h 观测值") ///
        label(5 "72h 预测值") label(6 "72h 观测值") ///
        cols(2)
    )

代码说明:

  • separate命令会根据Hours的取值生成新变量,比如pred_24对应24小时的预测值,obs_48对应48小时的观测值
  • 后续绘图时直接调用新变量即可,逻辑更清晰,新增时间组时只需添加对应的绘图行

备选方案:若坚持使用gr7命令

如果你特别依赖gr7自定义命令,可以先把三个图表分别保存,再用graph combine合并(注意:这种方式是把独立图表拼接,而非同一坐标系整合):

// 保存三个独立图表
gr7 predicted_response Response Concentration if Hours==24, xlab ylab c(l.) s(iO) saving(plot24, replace)
gr7 predicted_response Response Concentration if Hours==48, xlab ylab c(l.) s(iO) saving(plot48, replace)
gr7 predicted_response Response Concentration if Hours==72, xlab ylab c(l.) s(iO) saving(plot72, replace)
// 合并图表
graph combine plot24.gph plot48.gph plot72.gph, cols(1) title("不同时间组的响应曲线")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 18:50:29