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

如何修改metafor包森林图的点与置信区间分组颜色

问题原因

metafor包forest()函数的参数分工明确,你之前的写法踩了两个核心坑:

  • 你传入颜色的col参数,默认仅控制汇总结果多边形的颜色,不控制单个研究的点估计、置信区间须线的颜色
  • 你直接按原始数据集顺序生成颜色向量,但代码里用了order参数对研究做重排,就算传对了参数,颜色和分组也会错位。

单个研究的图形元素颜色,需要用两个独立参数控制:

  • col.obs:控制单研究点估计(方块/圆点)的填充色
  • col.ci:控制单研究置信区间须线的颜色

修正代码

提前计算排序索引,按排序后的分组生成匹配的颜色向量,再分别传给对应参数即可:

# 提前计算排序索引,保证颜色顺序和绘图排列顺序完全一致
ord <- order(factor(dat$region4, levels = c("south","north islands", "central","north")),
             dat$target_status, dat$yi)
# 按排序后的分组生成对应颜色:targeted组为红色,nontargeted组为蓝色
study_cols <- c("red", "blue")[match(dat$target_status[ord], c("targeted", "nontargeted"))]

forest(res.overall, 
       xlim = c(-8, 6),
       cex = 0.75, 
       ylim = c(-3, 53),
       order = ord,
       rows = c(4:11,17:22,28:35,41:47),
       mlab = mlabfun("biomass overall", res.overall),
       slab = paste(dat$group),
       col = "grey30", # 单独设置汇总多边形的颜色,这里用深灰色
       col.obs = study_cols, # 单研究点估计按分组上色
       col.ci = study_cols, # 单研究置信区间按分组上色
       # 如果需要点估计方块的边框和填充同色,再加下面这行
       # border = study_cols,
       header = "Region | Monitoring Group")

可选调整

如果需要给不同分组的研究设置不同大小的点估计方块,可以给psize传入和分组匹配的数值向量,传参逻辑和颜色设置一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:39:14