R语言forestplot实现分组着色与辅助线自定义
在使用R语言的forestplot包绘制森林图时,默认的配色和线条样式往往较为单一。为了实现更精细的视觉效果,可以通过编写自定义绘图函数来按分组设置Marker颜色,并通过构建line_list对象为图表添加自定义的水平辅助线。
按分组设置Marker颜色
forestplot允许用户传入自定义函数来处理置信区间的绘制。我们可以创建一个闭包函数,利用内部计数器对条目进行分组判断,从而指定不同的颜色代码(Hex Code)。
library(forestplot)
# 定义自定义绘图函数 fn
fn <- local({
i = 0
function(..., clr.line, clr.marker){
i <<- i + 1
# 假设每4行为一个循环组,根据余数决定颜色
if(i%%4==3){
fpDrawNormalCI(..., clr.line = "#000000", clr.marker = "#00B9BF") # 第3组
} else if(i%%4==0){
fpDrawNormalCI(..., clr.line = "#000000", clr.marker = "#C26EFF") # 第4组
} else if(i%%4==2){
fpDrawNormalCI(..., clr.line = "#000000", clr.marker = "#6DA500") # 第2组
} else{
fpDrawNormalCI(..., clr.line = "#000000", clr.marker = "#F9675C") # 第1组
}
}
})
# 准备表格文本
# 注意:实际使用中需确保 figure_2_data 变量已正确加载
# tabletext=cbind(c("Outcomes",figure_2_data$Treatmeant),c("CI (95%OR)",figure_2_data$`OR (95% CI)*`),c("P Value", figure_2_data$P))
# 调用 forestplot
# is.summary 用于标识哪些行是标题/分组头,避免被误认为是数据点参与颜色循环计算可能需要根据实际数据结构调整逻辑
# graph.pos = 2 表示图形在第二列位置
# colgap 控制列间距
# graphwidth 控制图形宽度
forestplot(
labeltext = c("Outcomes", "CI (95% OR)", "P Value"), # 示例占位,请替换为实际数据
mean = c(NA, your_mean_data), # 替换为实际均值数据
lower = c(NA, your_lower_ci), # 替换为实际下限数据
upper = c(NA, your_upper_ci), # 替换为实际上限数据
boxsize = 0.5,
txt_gp = fpTxtGp(
label = gpar(cex = 1.25),
ticks = gpar(cex = 1.1),
xlab = gpar(cex = 1.2),
title = gpar(cex = 1.2)
),
zero = 1, # 参考线位置
align = "l",
is.summary = c(TRUE, rep(FALSE, n)), # n为数据行数,需根据实际调整
col = fpColors(box = c("darkblue", "darkred")),
fn.ci_norm = fn, # 关键:应用自定义颜色函数
colgap = unit(8, "mm"),
graphwidth = unit(12, "cm")
)
为各行添加自定义辅助线
为了增强图表的可读性,可以在特定行之间添加水平辅助线。forestplot支持通过hrzl_lines参数传入一个命名列表,其中每个名字对应图表的行索引,值由gpar设定。
操作步骤如下:
- 初始化列表:创建一个空列表用于存储每行的线形参数。
- 批量生成通用线:可以使用循环为所有行生成默认样式的辅助线(例如浅灰色细线)。
- 覆盖特殊行:针对需要强调的行(如标题行、关键节点),单独赋值更粗或颜色更深的参数。
- 应用到绘图函数:将生成的列表赋值给
hrzl_lines参数。
# 初始化辅助线列表
line_list_Insuf1 <- list()
# 循环为前84行添加浅灰色半透明辅助线
# 注意:columns 参数限制线条横跨的列范围
for (i in 1:84) {
exprs <- paste0("line_list_Insuf1$'`, i, `' = gpar(lwd=1, columns=1:5, col = '#99999922')")
eval(parse(text = exprs))
}
# 为第1行和第2行添加深色加粗辅助线(例如作为分组标题分割线)
line_list_Insuf1$`1` <- gpar(lwd = 2, columns = 1:7, col = '#202020')
line_list_Insuf1$`2` <- gpar(lwd = 2, columns = 1:7, col = '#202020')
# 在调用 forestplot 时加入 hrzl_lines 参数
# forestplot(..., hrzl_lines = line_list_Insuf1)
通过结合自定义绘图函数与辅助线列表配置,可以灵活定制符合出版要求或品牌规范的R语言森林图。
以上就是R语言可视化开发forestplot根据分组设置不同颜色的详细内容,更多关于R语言forestplot高级排版的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









