获取 axis.text 和 axis.title 之间的保证金值
Get margin value between axis.text and axis.title
短版:
如何获取axis.text和axix.title之间的边距值?
长版:
我正在尝试合并三个 ggplot 图形。比例应该是一致的,所以我使用 rbind(与 ggplotGrob)对齐前两个图形。但是最后一个有刻面,所以不可能对所有三个都使用这个解决方案。
我的想法是在第三张图中手动设置axis.title和axis.text之间的space(这可以使用边距和element_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
预期结果:
所有三个图形的绘图区域对齐。
您可以使用 egg
包中的 ggarrange
对齐图表,而无需明确担心边距大小(@bVa link 中的答案之一使用此函数):
#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)
短版: 如何获取axis.text和axix.title之间的边距值?
长版: 我正在尝试合并三个 ggplot 图形。比例应该是一致的,所以我使用 rbind(与 ggplotGrob)对齐前两个图形。但是最后一个有刻面,所以不可能对所有三个都使用这个解决方案。
我的想法是在第三张图中手动设置axis.title和axis.text之间的space(这可以使用边距和element_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
预期结果: 所有三个图形的绘图区域对齐。
您可以使用 egg
包中的 ggarrange
对齐图表,而无需明确担心边距大小(@bVa link 中的答案之一使用此函数):
#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)