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

如何在forestplot中为正负效应设置不同颜色:负效应方块及须设为红色

解决方案:根据估计值正负设置forestplot颜色

当然可行!我们可以通过为每个条目单独分配颜色的方式,让负估计值对应的方块和误差线显示为红色,正估计值保持深蓝色。下面是修改后的完整代码:

tabletext<-cbind( 
  c("","Intervention","1", "2", "3", "4", "5", "6", "7", "Baseline (ref)"), 
  c("","Predicted 95% CI","151 [128;175]", "146 [128;163]", "161 [144;179]","147 [130;164]", "137 [121;154]","141 [126;156]", "180[156;205 ]", "146 [129;162]"), 
  c("","p-value", ".98",".99", ".060", ".99", ".61",".92",".0016","ref")
) 

data <- data.frame(
  coef=c(NA,NA,6.093, 0.060,16.01,1.142,-8.42,-4.58, 34.45,0), 
  low=c(NA,NA,-12.4,-9.02,3.55,-9.82,-20.65,-15.16,15.97,0), 
  high=c(NA,NA,24.62,9.14,28.464,12.11,3.80, 5.99, 52.92,0)
) 

# 根据估计值正负创建颜色向量:负的用红色,正的用深蓝色
box_colors <- ifelse(data$coef < 0, "red", "darkblue")
box_colors[is.na(data$coef)] <- NA  # 表头行无需颜色
line_colors <- box_colors  # 误差线和方块使用相同颜色

forest<-forestplot(
  tabletext, 
  upper = data$high, 
  lower=data$low, 
  mean = data$coef, 
  zero = 0, 
  boxsize = 0.2, 
  cex=0.9, 
  lineheight = "auto", 
  title="TITLE", 
  xlab = "Effect size 95% CI", 
  vertices = TRUE, 
  col=fpColors(box=box_colors, lines=line_colors, zero = "gray50"), 
  txt_gp=fpTxtGp(label=gpar(cex=1), ticks=gpar(cex=1), xlab=gpar(cex = 1), title=gpar(cex = 1))
)

关键修改说明:

  • 我们用ifelse()函数生成了一个颜色向量box_colors,判断每个coef值是否小于0:如果是,就赋值为红色;否则保持深蓝色。
  • 把表头对应的NA值也设为NA,这样forestplot不会给表头行绘制方块和误差线。
  • 将颜色向量分别传给fpColors()的box(方块颜色)和lines(误差线颜色)参数,替代原来的单一颜色设置。

这样运行代码后,因子5和6对应的方块及误差线就会显示为红色,其余正估计值的条目保持原有深蓝色样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:52:53