geom_tile图的垂直对齐

时间:2018-04-04 23:06:30

标签: r ggplot2 gridextra

我有来自三个不同研究的数据,我使用ggplot2' s geom_tile绘图。列为category - 将在y轴上绘制,x - x轴和score - 将对切片进行颜色编码。 study列指定了研究。

以下是数据:

library(dplyr)
set.seed(1)
df <- data.frame(category=strsplit("Peptide,Amino Acid,Nucleotide,Xenobiotics,Carbohydrate,Cofactors and Vitamins,Lipid,Lysophospholipid,Gamma-glutamyl Amino Acid,Leucine  Isoleucine and Valine Metabolism,Fatty Acid  Dicarboxylate,Long Chain Fatty Acid,Sterol,Secondary Bile Acid Metabolism,Polyunsaturated Fatty Acid (n3 and n6),Other Tentative Assignments,Energy,Cofactors And Vitamins,Sulfur Metabolism,Amino Acids,Carnitine And Fatty Acid Metabolsim,Glycerophospholipid Biosynthesis,Stimulating/Exogenous Compounds,Carboxylic Acid,Bile Acids,Gamma-Glutamyls,Arachidonate Metabolism,Gsh Homeostasis,Medium Chain Fatty Acid,Urea cycle; Arginine and Proline Metabolism",split=",")[[1]],
                 x=rep("x",30),score=log10(runif(30,0,1)),study=c(rep("study1",12),rep("study2",10),rep("study3",8)),stringsAsFactors = F)

我使用geom_tile分别绘制每项研究,但将width中的geom_tile参数定义为所有三个图中的0.5:

library(ggplot2)
plot1 <- ggplot(data=df %>% dplyr::filter(study == "study1"),aes(x=x,y=category))+geom_tile(aes(fill=score),width=0.5)+
  scale_fill_gradient2(low='darkblue',mid='white',high='darkred')+
  theme_minimal()+xlab("")+labs(fill="score")+ylab("Pathway")+
  theme(axis.text.x=element_blank(),plot.title=element_text(size=16,hjust=0,face="bold"),axis.title=element_text(size=18,face="bold"),axis.text=element_text(size=16),legend.text=element_text(size=16),legend.title=element_text(size=16,face="bold"))+ggtitle("A.")

plot2 <- ggplot(data=df %>% dplyr::filter(study == "study2"),aes(x=x,y=category))+geom_tile(aes(fill=score),width=0.5)+
  scale_fill_gradient2(low='darkblue',mid='white',high='darkred')+
  theme_minimal()+xlab("")+labs(fill="score")+ylab("Pathway")+
  theme(axis.text.x=element_blank(),plot.title=element_text(size=16,hjust=0,face="bold"),axis.title=element_text(size=18,face="bold"),axis.text=element_text(size=16),legend.text=element_text(size=16),legend.title=element_text(size=16,face="bold"))+ggtitle("B.")

plot3 <- ggplot(data=df %>% dplyr::filter(study == "study3"),aes(x=x,y=category))+geom_tile(aes(fill=score),width=0.5)+
  scale_fill_gradient2(low='darkblue',mid='white',high='darkred')+
  theme_minimal()+xlab("")+labs(fill="score")+ylab("Pathway")+
  theme(axis.text.x=element_blank(),plot.title=element_text(size=16,hjust=0,face="bold"),axis.title=element_text(size=18,face="bold"),axis.text=element_text(size=16),legend.text=element_text(size=16),legend.title=element_text(size=16,face="bold"))+ggtitle("C.")

然后,I&#39; M尝试使用gridExtra&#39把他们在一个单一的数字; S arrangeGrob函数,其中我希望他们垂直对准但没有按&#39;吨似乎工作:

library(gridExtra)

combined.plot <- gridExtra::arrangeGrob(grobs=list(plot1,plot2,plot3),ncol=1,nrow=3)

因为这是我得到的:

enter image description here

所以我的问题是如何创建一个图形,其中三个图形具有完全相同的图块宽度并垂直对齐(即,图块是对齐的而不是长类别文本)。

1 个答案:

答案 0 :(得分:3)

您可以使用包ggarrange中的功能ggpubr

ggpubr::ggarrange(plot1, plot2, plot3, nrow = 3, align = "v")

enter image description here

PS:

  • 使用egg::ggarrange可以获得类似的结果,但是对于情节B(没有添加空格),y-lab错位:egg::ggarrange(plot1, plot2, plot3)
  • 不要输入所有图表,您可以使用参数plotlist和函数mgetggpubr::ggarrange(plotlist = mget(paste0("plot", 1:3)), nrow = 3, align = "v")