在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
我想修改以下森林图:
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