2016-12-31 91 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