plot_grid中的rel_heights没有响应

时间:2016-12-31 03:33:24

标签: r ggplot2 cowplot

我有两个ggplot我试图使用cowplot的{​​{1}} {<1}}组合在一起:

首先plot_griddata.frame

ggplot

第二个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.frame

ggplot

我的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高度的一半并且底部对齐。这就是我所得到的:

enter image description here

使用main.plot似乎没有任何改变。

1 个答案:

答案 0 :(得分:2)

rel_heights当您将两个或多个绘图堆叠在另一个上面时,会分配垂直空间。由于此处只有一行图,rel_heights没有做任何事情。例如,运行plot_grid(main.plot, sub.plot, rel_heights=c(2,1), ncol=1)以了解rel_heights的工作原理。

要获得所需的布局,可以在右侧绘图的顶部堆叠一个空的grob(图形对象),这将导致右侧绘图占用可用垂直空间的一半。在下面的代码中,我们使用arrangeGrob包中的gridExtranullGrob()堆叠在sub.plot之上。然后我们将arrangeGrob的输出放在main.plot旁边。默认情况下,两个grob 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