我试图用一些荟萃分析的结果建立一个森林图(由我自己执行,所以我不想使用meta
包)。您可以复制的结果如下:
structure(list(
cohort = c("cohort1", "cohort2", "cohort3", "cohort4", "cohort5", "cohort6", "cohort7"),
beta = c(-0.238927428673765, -0.015095974676985, 0.364330350386939, -0.111741616010383, -0.196697525708519, -0.019993786083488, 0.0530815000660616),
IC95_low = c(-0.339291563342713, -0.0857064739555255, -0.0365912072567037, -0.505483167285389, -0.472341750731663, -0.369903598485953, -0.147466346165432),
IC95_high = c(-0.138563294004818, 0.0555145246015554, 0.765251908030581, 0.281999935264622, 0.0789466993146241, 0.329916026318977, 0.253629346297556),
n = c(6199L, 531L, 109L, 452L, 529L, 826L, 924L),
age = c(8.6, 2.5, 8.5, 7.8, 5.8, 4.2, 6.9)),
row.names = c(NA, -7L), class = "data.frame")
我已经使用ggplot2
和gridExtra
的以下代码实现了这些结果:
forest = result %>%
ggplot(aes(y = cohort, x = beta)) +
geom_point(aes(size = n), shape = 18) +
geom_errorbarh(aes(xmin = IC95_low, xmax = IC95_high), height = 0.15) +
geom_vline(xintercept = 0, color = "red", linetype = "dashed", cex = 0.7, alpha = 0.5) +
labs(x = "mbmi beta", y = "") +
theme(axis.text.y=element_blank(),
axis.ticks.y=element_blank(),
legend.position = "none"
) +
scale_size_continuous(range = c(2,6))
data_table <- ggplot(data = result, aes(y = cohort)) +
geom_text(aes(x = 0, label = cohort), hjust = 0) +
geom_text(aes(x = 0.7, label = n)) +
geom_text(aes(x = 1, label = age), hjust = 1) +
scale_colour_identity() +
theme_void() +
theme(plot.margin = margin(5, 0, 35, 0))
grid.arrange(data_table, forest, ncol = 2, widths = c(1,3),
top = textGrob(paste("Results from available cohorts in:", outcome),gp=gpar(fontsize=20,font=4)))
然而,我想把表结构中的变量名称放在左边,并加上COHORT、n和mean_age......这感觉是不可能的,我不知道应该用哪种方法来做。
我们能讨论一下吗?
1条答案
按热度按时间jljoyd4f1#
一个选项是添加列标题标签作为轴文本或标签。此外,我切换到
patchwork
来粘合您的绘图,恕我直言,它在对齐绘图时做得相当不错: