【问题标题】:Creating a a grid of ggplots with table grob of values below使用下面的值表创建一个 ggplots 网格
【发布时间】: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


【解决方案1】:

要制作绘图网格,您必须在它们之前指定

par(mfrow=(nrows, ncols)

然后您将生成的每个图将在 nrow*ncols 网格中逐行添加。

要将图形参数设置回默认值,请在绘图末尾键入

par(mfrow=(1,1))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-02
    • 2019-10-24
    • 1970-01-01
    • 2021-04-14
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多