使用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<-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轴标签的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用cowplot包的plot_grid函数将两个ggplot2可视化结果并排组合起来并添加图像标签AB设置组合图像使用共享的图例(shared legend in cowplot)
R语言ggplot2可视化分组点图使用EnvStats包的stat_n_text函数为每个分组添加样本数标签信息(例如,在图像中X轴上方添加n=11)
R语言ggplot2可视化分组点图使用EnvStats包的stat_n_text函数为每个分组添加样本数标签信息(例如,在图像中X轴上方添加n=11)