获取axis.text和axis.title之间的边距值

时间:2016-08-05 15:47:14

标签: r ggplot2 gridextra

简短版本: 如何获取axis.text和axix.title之间的边距值?

长版: 我想合并三个ggplot图形。比例应该是一致的,所以我使用rbind(使用ggplotGrob)来对齐前两个图形。但最后一个有方面,因此不可能将这个解决方案用于所有三个方面。

我的想法是在第三个图形中手动设置axis.title和axis.text之间的空间(这可以使用margin_text的边距来完成)。 但是,要做到这一点,我应该在前两个图形之一中获得此边距的值。我相信ggplotGrob中提供了这些信息,但我不知道在grob结构中检索此值的路径。

假代码示例:

library(ggplot2)
library(gridExtra)

a <- ggplotGrob( ggplot(iris[iris$Species != "setosa",], aes(x=Sepal.Length, y=Petal.Width*100000, color=Species)) + geom_line()  + theme(legend.position="none"))

b <- ggplotGrob( ggplot(iris[iris$Species != "setosa",], aes(x=Sepal.Length, y=Petal.Length, color=Species)) + geom_line() + theme(legend.position="none"))

c <- ggplotGrob(ggplot(head(mpg, 100), aes(class)) + geom_bar() + facet_grid(.~manufacturer, scales="free_x"))

g1 <- rbind(a, b, size="first")
grid.arrange(g1, c, ncol=1)

目前的结果: 前两个图形与绘图区域对齐,但不是最后一个。 result plot

预期结果: 所有三个图形的绘图区域对齐。

1 个答案:

答案 0 :(得分:2)

您可以使用ggarrange包中的egg对齐图表,而无需明确担心边距大小(@ bVa&#39; s链接中的一个答案使用此功能):

#devtools::install_github("baptiste/egg")
library(egg)
library(ggplot2)

a <- ggplot(iris[iris$Species != "setosa",], aes(x=Sepal.Length, y=Petal.Width*100000, color=Species)) + geom_line()  + theme(legend.position="none")

b <- ggplot(iris[iris$Species != "setosa",], aes(x=Sepal.Length, y=Petal.Length, color=Species)) + geom_line() + theme(legend.position="none")

c <- ggplot(head(mpg, 100), aes(class)) + geom_bar() + facet_grid(.~manufacturer, scales="free_x")

ggarrange(a,b,c, ncol=1)

enter image description here