【发布时间】:2018-05-09 20:34:59
【问题描述】:
我正在尝试在 ggplot 中创建一个带有值表的误差线图。此外,我正在尝试将其放入网格中。这些用于线性回归值和置信区间。
我有以下几点:
point<- c(1:10)
ciupper <- seq(2,20,2)
cilower <- seq(.1,1,10)
year <- c("2005/06", "2007", "2008", "2009", "2010", "2011", "2012", "2013", "2014", "2015")
label <-c(quote("Ref"),bquote("val 1"),bquote("val 2"),bquote("val 3"),bquote("val 4"),bquote("val 5"),
bquote("val 6"), bquote("val 7"), bquote("val 8"), bquote("val 9"))
data9 <- data.frame(point, cilower, ciupper, year)
tabl9 <- data.frame(year, label)
quant9 <- ggplot(data=data9, aes(x=year, y=point))
+ geom_point(size=3)
+ geom_errorbar(ymax=ciupper, ymin=cilower, width=0.1)
+ geom_hline(yintercept = 0, linetype = "dashed")
+ ylim(-5, 30) + labs(x="", y="", title="Title") + theme_pubr() + labs_pubr()
quant9
attend <- ggarrange(quant9, quant9, quant9, labels="AUTO")
annotate_figure(attend, top=text_grob("Title", size=20),
left=text_grob("X Axis", size=20, rot=90), bottom=text_grob("Year", size=20))
这给了我这个:
我想在每个图表下方添加一个包含实际值的表格。我一直在使用 tableGrob:
tt <- ttheme_default(padding =unit(c(6,4), "mm"))
tb9 <- tableGrob(t(tabl9), theme=tt, rows=NULL)
test <- grid.arrange(quant9,tb9,nrow = 2,ncol=1)
通过弄乱widths 设置,我终于能够实现 grob 与其中一个情节的密切匹配,但是一旦我尝试将其放入网格中,一切都被扭曲了。
谁能帮我弄清楚如何优雅地让值整齐地位于图表下方,然后为每个图表执行此操作并将其放入网格中进行显示?
【问题讨论】:
-
我不知道添加不涉及手动摆弄的表格的方法,但如果您对如何访问绘图的内部 grob 坐标有足够的了解,它可能会自动执行。另一种选择是使用
geom_text而不是geom_point并避免使用值表:geom_text(aes(label=point), size=3) + geom_errorbar(ymax=ciupper, ymin=cilower, width=0.1, size=0.2, linetype="11", colour="red") + ... -
或者,将值放在绘图面板上,但低于误差线的最低点。例如,将以下内容添加到您的图中(假设您的实际用例涉及十进制数而不是整数,我对标签进行了四舍五入):
+ geom_text(aes(label=sprintf("%1.1f", point), y=-1), size=3). -
对 TableGrob 的修补令人沮丧,虽然很漂亮,但最终没有成功。我希望有一种方法可以在 ggplot 中制作漂亮的表格并将它们链接到图表。我尝试了您的方法,它并不完美,但最终实现了我的目标,同时看起来不错。谢谢!
-
作为说明,我实际上走得更远,使用了 geom_rect(制作灰色背景)、geom_segment(在背景颜色上添加垂直白线),并添加了一个额外的 geom_hline(本质上更大一个框),以便使用上面说明的 geom_text 选项重新创建 tableGrob。最终工作得非常好。
标签: r ggplot2 visualization gtable