如何在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
相关产品推荐
相关产品推荐

