2016-12-31 87 views
1

我有两个ggplot了,我就是想放在一起使用cowplotplot_gridrel_heights在plot_grid没有响应

首先data.frameggplot

require(ggplot2) 
main.df <- data.frame(sample=c(paste("E.plus.A.plus",1:3,sep="_"),paste("E.minus.A.plus",1:3,sep="_"),paste("E.plus.A.minus",1:3,sep="_"),paste("E.minus.A.minus",1:3,sep="_")), 
         replicate=rep(1:3,4),cpm=c(rnorm(12)), 
         factor.level=factor(c(rep("E.plus.A.plus",3),rep("E.minus.A.plus",3),rep("E.plus.A.minus",3),rep("E.minus.A.minus",3)), 
              levels=c("E.plus.A.plus","E.minus.A.plus","E.plus.A.minus","E.minus.A.minus"))) 

main.plot <- ggplot(main.df,aes(x=replicate,y=cpm,color=factor.level))+geom_point(size=3)+ 
    facet_wrap(~factor.level,ncol=length(levels(main.df$factor.level)))+ 
    labs(x="replicate",y="cpm")+scale_x_continuous(breaks=unique(main.df$replicate))+theme_bw()+ 
theme(legend.position="none",panel.border=element_blank(),strip.background=element_blank(),axis.title=element_text(size=8),plot.title=element_text(size=9,hjust=0.5)) 

data.frameggplot

effects.df <- data.frame(factor.level=c("E.plus.A.plus-E.minus.A.plus","E.plus.A.plus-E.plus.A.minus","E.plus.A.plus-E.minus.A.minus", 
             "E.minus.A.plus-E.plus.A.minus","E.minus.A.plus-E.minus.A.minus","E.plus.A.minus-E.minus.A.minus"), 
         effect=rnorm(6),effect.df=runif(6,0,0.5),p.value=runif(6,0,1),y=1:6+0.2) 
effects.df$effect.high <- effects.df$effect+effects.df$effect.df 
effects.df$effect.low <- effects.df$effect-effects.df$effect.df 
effects.df$factor.level <- factor(effects.df$factor.level,levels=effects.df$factor.level) 

sub.plot <- ggplot(effects.df,aes(x=effect,y=factor.level,color=factor.level))+geom_point(size=2.5,shape=19)+geom_errorbarh(aes(xmax=effect.high,xmin=effect.low),height=0.1)+ 
    geom_vline(xintercept=0,linetype="longdash",colour="black",size=0.25)+theme_bw()+theme(legend.position="none",panel.border=element_blank(),strip.background=element_blank(),axis.title=element_text(size=7),axis.text=element_text(size=7),legend.text=element_text(size=7),legend.title=element_text(size=7))+ 
    geom_text(aes(x=effects.df$effect,y=effects.df$y,label=format(signif(effects.df$p.value,2),scientific=T)),size=2.5) 

我的plot_grid命令是:

require(cowplot) 
plot_grid(main.plot,sub.plot,ncol=2,nrow=1,rel_widths=c(2,1.75),rel_heights=c(1,0.5)) 

,因为我想sub.plot是的main.plot和底部对齐的高度的一半。这就是我得到不过:

enter image description here

rel_heights周围玩似乎并没有改变任何东西。

回答

2

rel_heights分配垂直空间,当你有两个或更多的图堆叠在另一个之上时。既然你在这里只有一排地块,rel_heights什么也没做。例如,运行plot_grid(main.plot, sub.plot, rel_heights=c(2,1), ncol=1)以查看rel_heights的工作原理。

要获得您想要的布局,您可以在右侧图上堆叠空的grob(图形对象),这将导致右侧图占据垂直空间的一半。在下面的代码中,我们使用gridExtra包中的arrangeGrobnullGrob()堆叠在sub.plot之上。然后我们将arrangeGrob的输出放在main.plot旁边。默认情况下,两个grobs arrangeGrob将分别占据垂直空间的一半。但是,如果您决定,例如,您希望sub.plot占据垂直空间的2/3,则应该执行arrangeGrob(nullGrob(), sub.plot, ncol=1, heights=c(1,2))

require(cowplot) 
require(gridExtra) 
require(grid) 

plot_grid(main.plot, arrangeGrob(nullGrob(), sub.plot, ncol=1), 
      ncol=2, rel_widths=c(2,1.75)) 

enter image description here

+1

作为正在使用gridExtra说不定grid.arrange提供一个alt方法'grid.arrange(main.plot,sub.plot,layout_matrix =矩阵(C(1,1,NA,2 ),2))' – user20650