在 r Forestplot 中的任意位置添加文本

问题描述 投票:0回答:1

根据问题,我想在生成的森林图中的任意位置添加文本注释:

library(forestplot)
library(tidyr)

cohort <- data.frame(Age = c(43, 39, 34, 55, 70, 59, 44, 83, 76, 44, 
                             75, 60, 62, 50, 44, 40, 41, 42, 37, 35, 55, 46), 
                     Group = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                         1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), levels = c("1","2"), class = "factor"))

age.lm <- lm(Age ~ Group, data = cohort)

age.data <- summary(age.lm)$coefficients[2,]

age.data <- rbind(c(0,0,0,1,"Group 1", "n=15"),
                  c(age.data[1], age.data[1]-age.data[2]*1.95, 
                  age.data[1]+age.data[2]*1.95, age.data[4], "Group 2", "n=7"))

colnames(age.data) <- c("mean","lower","upper","p-val","labeltext","numbers")

age.data <- data.frame(age.data)


age.data$mean <- as.numeric(age.data$mean)
age.data$lower <- as.numeric(age.data$lower)
age.data$upper <- as.numeric(age.data$upper)


age.plot <- forestplot(age.data,
           labeltext = c(labeltext,numbers),
           boxsize = 0.1,
           xlog = FALSE,
           clip=c(-20,20),
           xticks=c(-20,-10,0,10,20),
           txt_gp = fpTxtGp(ticks=gpar(cex=1)),
           align=c("l","c","l"))

print(age.plot)

这会生成以下图: Forest plot 但是假设我想添加不属于森林图一部分的文本,例如: Forest plot with annotation

有没有办法通过添加到森林图来做到这一点? R/forestplot 使用网格图形,但 text("Text", location) 不起作用。

当然,我可以使用图像编辑器添加所有内容,但这会因为需要注释很多内容而变得乏味,而且我更喜欢使用适合森林图的文本来执行此操作(这将使更容易排列我需要添加的内容)

我问的原因是因为我有一个两组比较森林图,效果大小/贝塔值无法自动添加,所以我需要稍后添加它们。

r grid r-forestplot
1个回答
0
投票

当您

print
森林图对象时生成的图像是使用网格图形系统创建的,因此像
text
这样的基本图形调用不起作用。相反,您需要执行以下操作:

library(grid)

print(age.plot)
grid.text("Text", 0.4, 0.45, gp = gpar(col = "red", font = 3, cex = 3))

enter image description here

请注意,x、y 坐标位于 npc 空间中(即从绘图窗口左下角的 {x = 0, y = 0} 缩放到右上角的 {x = 1, y = 1}。

© www.soinside.com 2019 - 2024. All rights reserved.