11

我有一个多图图形,由 2x2 配置中的 4 个图组成。我使用“cowplot”包和 plot_grid 函数使用下面的代码排列图

plot_grid(p1, p2, p3, p4, align='vh', vjust=1, scale = 1)

其中 p1-p4 是我的 4 个地块。生成的图形具有与多图中的每一列相关联的 x 轴标签:

在此处输入图像描述

有谁知道我如何用cowplot或其他方式编写一个以多图底部为中心的单个x轴标签?

4

2 回答 2

18

另一种选择是用于textGrob为常见的 x 和 y 标签添加注释。

在此示例中,如果您希望删除单个轴标签,只需包含theme(axis.title = element_blank())在绘图调用中。(或者,对于 y 轴,使用theme(axis.title.y=element_blank()))。

library(ggplot2)
library(cowplot)
library(grid)
library(gridExtra)

ToothGrowth$dose <- as.factor(ToothGrowth$dose)

#make 4 plots

p1<-ggplot(ToothGrowth, aes(x=dose, y=len)) + 
  geom_boxplot()


p2<-ggplot(ToothGrowth, aes(x=dose, y=supp)) + 
  geom_boxplot()

p3<-ggplot(ToothGrowth, aes(x=supp, y=len)) + 
  geom_boxplot()

p4<-ggplot(ToothGrowth, aes(x=supp, y=dose)) + 
  geom_boxplot()

#combine using cowplot

plot<-plot_grid(p1, p2, p3, p4, align='vh', vjust=1, scale = 1)

#create common x and y labels

y.grob <- textGrob("Common Y", 
                   gp=gpar(fontface="bold", col="blue", fontsize=15), rot=90)

x.grob <- textGrob("Common X", 
                   gp=gpar(fontface="bold", col="blue", fontsize=15))

#add to plot

grid.arrange(arrangeGrob(plot, left = y.grob, bottom = x.grob))

在此处输入图像描述

于 2018-05-22T23:02:40.543 回答
16

这有点晚了,但我遇到了同样的问题,所以希望下一个查看这个问题的人会发现这很有用。

library(cowplot)
plot<-plot_grid(p1, p2, p3, p4, align='vh', vjust=1, scale = 1)
ggdraw(add_sub(plot, "Label", vpadding=grid::unit(0,"lines"),y=6, x=0.5, vjust=4.5))
于 2016-09-21T02:46:19.000 回答