使用 ggplot 和 plot_layout 与 textGrob 排列的图的全局 x 和 y 标签
Global x and y labels for plots arranged using ggplot and plot_layout with textGrob
我使用 ggplot 和 plot_layout 创建了一个包含许多元素的图。我想添加公共 x 和 y 轴。我想使用 textGrob 与我以这种方式创建的其他图保持共同的外观。
MWE
library(patchwork)
library(ggplot2)
library(grid)
library(gridExtra)
p1 <- ggplot(mtcars) +
geom_point(aes(mpg, disp, color = mpg)) +
ggtitle('Plot 1')
p2 <- ggplot(mtcars) +
geom_boxplot(aes(gear, disp, group = gear)) +
ggtitle('Plot 2')
p3 <- ggplot(mtcars) +
geom_point(aes(hp, wt, colour = mpg)) +
ggtitle('Plot 3')
design <- "
1111
223#
"
myplt <- (p1 + p2 + p3 + plot_layout(design=design, guides = "collect") &
theme(legend.position = 'right',
legend.direction = 'vertical'))
y.grob <- textGrob("My Y label",
gp=gpar(fontface="bold", fontsize=15), rot=90)
x.grob <- textGrob("My X label",
gp=gpar(fontface="bold", fontsize=15))
grid.arrange(arrangeGrob(myplt, left = y.grob, bottom = x.grob))
以上方法适用于我使用 plot_grid 安排的图(即添加公共标签)。然而,通过上面的内容,我得到了一个带有正确标签的空白图,或者 MWE 在正确标签上方但只有图 3。
我也试过添加
myplt
grid::grid.draw(grid::textGrob(y.grob))
grid::grid.draw(grid::textGrob(x.grob))
因为 回答,但这只是把 text[GRID text 26826]
放在我的情节中间。
我确实设法让他们的其他想法发挥作用,但间距太可怕了,我无法让字体细节与我对其他地块的字体细节相匹配,所以我更愿意使用已经创建的 textGrobs 找到解决方案.
编辑:该设计有一个额外的空白行,我删除了它
要使 grid.arrange
使用补丁,您必须先使用 patchwork::patchworkGrob
将其转换为 grob。此外,不需要 grid.arrange(arrangeGrob(...))
。只需使用 grid.arrange
:
grid.arrange(patchworkGrob(myplt), left = y.grob, bottom = x.grob)
我使用 ggplot 和 plot_layout 创建了一个包含许多元素的图。我想添加公共 x 和 y 轴。我想使用 textGrob 与我以这种方式创建的其他图保持共同的外观。
MWE
library(patchwork)
library(ggplot2)
library(grid)
library(gridExtra)
p1 <- ggplot(mtcars) +
geom_point(aes(mpg, disp, color = mpg)) +
ggtitle('Plot 1')
p2 <- ggplot(mtcars) +
geom_boxplot(aes(gear, disp, group = gear)) +
ggtitle('Plot 2')
p3 <- ggplot(mtcars) +
geom_point(aes(hp, wt, colour = mpg)) +
ggtitle('Plot 3')
design <- "
1111
223#
"
myplt <- (p1 + p2 + p3 + plot_layout(design=design, guides = "collect") &
theme(legend.position = 'right',
legend.direction = 'vertical'))
y.grob <- textGrob("My Y label",
gp=gpar(fontface="bold", fontsize=15), rot=90)
x.grob <- textGrob("My X label",
gp=gpar(fontface="bold", fontsize=15))
grid.arrange(arrangeGrob(myplt, left = y.grob, bottom = x.grob))
以上方法适用于我使用 plot_grid 安排的图(即添加公共标签)。然而,通过上面的内容,我得到了一个带有正确标签的空白图,或者 MWE 在正确标签上方但只有图 3。
我也试过添加
myplt
grid::grid.draw(grid::textGrob(y.grob))
grid::grid.draw(grid::textGrob(x.grob))
因为 text[GRID text 26826]
放在我的情节中间。
我确实设法让他们的其他想法发挥作用,但间距太可怕了,我无法让字体细节与我对其他地块的字体细节相匹配,所以我更愿意使用已经创建的 textGrobs 找到解决方案.
编辑:该设计有一个额外的空白行,我删除了它
要使 grid.arrange
使用补丁,您必须先使用 patchwork::patchworkGrob
将其转换为 grob。此外,不需要 grid.arrange(arrangeGrob(...))
。只需使用 grid.arrange
:
grid.arrange(patchworkGrob(myplt), left = y.grob, bottom = x.grob)