在ggplot左右添加多个文本块

Add multiple text blocks left and right of ggplot

我想修改以下森林图:

library(ggplot2)
library(dplyr)

set.seed(123)

mydata <- data.frame(
  subgroup = c("age < 60", "age > 60", "male", "female"),
  n =      c(76, 37, 55, 58), 
  HR =      c(-2.12, 2.88, -0.91, 3.83), 
  CIlower = c(-5.64, 0.48, -2.78, 2.57), 
  CIupper = c(-0.37, 4.38, 0.47, 4.28), 
  pvalue =  c(0.083, 0.438, 0.237, 0.683))

mydata %>%
ggplot(aes(x = subgroup, y = HR, ymin = CIlower, ymax = CIupper)) +
    geom_pointrange() +
    geom_hline(yintercept = 1, lty = 2) +
    xlab("group") + 
    ylab("HR") +
    coord_flip() +
    theme_light() +
    theme(plot.margin = unit(c(1, 4, 1, 1), "lines")) +
  
  
  annotate("text", x = 4, y = 4, label = mydata$pvalue[4])
  annotate("text", x = 3, y = 4, label = mydata$pvalue[3])
  annotate("text", x = 2, y = 4, label = mydata$pvalue[2])
  annotate("text", x = 1, y = 4, label = mydata$pvalue[1])

我对 annotate 的尝试只能在我的情节中实现。

我的计划是在绘图区域的左侧或右侧添加与绘图相关的文本。我想将带有子组观察计数的文本(存储在 mydata 的变量“n”中)和带有 CI 的 HR 以及 p 值(存储在 mydata 的相应变量中)放在正确的位置情节 与组和数据点 一致。我知道这可以用标签来完成(https://newbedev.com/ggplot2-annotate-outside-of-plot,第一个代码解决方案)——这对 one 标签很有效,因为文本是根据数据点定位的,但我有多个标签 (n, HR/CI + p-value)。第三个网格解决方案对我不起作用,因为当我在降价中放大绘图时 y 位置不同(或者我只是做错了什么)。

谁能帮帮我?

谢谢!

你想要这样的东西吗?

ggplot(data = mtcars, aes(x = wt, y = mpg)) + 
    geom_point() +
    theme(plot.margin = unit(c(1,3,1,1), "cm")) + 
    annotate("text", x = 7.7, y = 10, label = "text1") +
    annotate("text", x = 8, y = 5, label = "text2") +
    annotate("text", x = 8.5, y = 20, label = "text3") +
    coord_cartesian(xlim = c(0,7), ylim = c(0, 35), clip = "off") #without this you can't print text labels outside the plot