使用cowplot包的多图的居中X轴标签

Posted

技术标签:

【中文标题】使用cowplot包的多图的居中X轴标签【英文标题】:Centered X-axis label for muliplot using cowplot package 【发布时间】:2016-01-11 21:29:06 【问题描述】:

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

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

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

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

【问题讨论】:

代码中没有数据。用于破解或嵌入古怪的策略,呃我的意思是“晦涩难懂”,包绘图例程是首先确定绘图范式(基础、格子或 ggplot),然后搜索注释或边缘标记方法以与适当的主要绘图功能。 【参考方案1】:

另一种选择是使用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))

【讨论】:

如果 plot_grid 派生对象将包含额外的行,例如一个图例 (plot_grid(plot, get_legend(another_plot), nrow=2); 是否有可能在图例和图之间获得 xgrob? @nouse 试试plot2&lt;-grid.arrange(arrangeGrob(plot, left = y.grob, bottom = x.grob)),然后是plot_grid(plot2, get_legend(another_plot),nrow=2) 不错!我不熟悉'arrangeGrob()'。我应该使用哪些参数将 xgrob 放置在更靠近绘图的位置? @nouse 选择 plot_grid(plot2, get_legend(legend_plot),nrow=2, rel_heights = c(6,1)),调整 rel_heights 以满足您的需求。 @J.Con,如果我们想将实验室向右或向左移动一点怎么办?我们怎么能做到呢?就我而言,我有第三列,每行都有一个图例(同一行中的图共享相同的图例)。因此,X-lab 应该位于第一列和第二列之间的中间,而不考虑第三列。我怎样才能移动 x-lab?【参考方案2】:

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

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))

【讨论】:

谢谢。您能否也评论一下如何对 Y 轴做同样的事情? @AK47 看到我的新答案。 :)

以上是关于使用cowplot包的多图的居中X轴标签的主要内容,如果未能解决你的问题,请参考以下文章

如何使用cowplot包在R中的同一页面上制作几个图?

R语言使用cowplot包的plot_grid函数将两个ggplot2可视化结果并排组合起来并添加图像标签AB设置组合图像使用共享的图例(shared legend in cowplot)

安排多个ggplots,但避免由于轴标签而挤压

R语言ggplot2可视化分组点图使用EnvStats包的stat_n_text函数为每个分组添加样本数标签信息(例如,在图像中X轴上方添加n=11)

R语言ggplot2可视化分组点图使用EnvStats包的stat_n_text函数为每个分组添加样本数标签信息(例如,在图像中X轴上方添加n=11)

R语言使用ggplot2包的快速可视化函数qplot绘制密度图(主题轴标签设置)实战