2

我有两个ggplots 我正在尝试使用cowplot's组合在一起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和底部对齐。这就是我得到的:

在此处输入图像描述

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

4

1 回答 1

3

rel_heights当您有两个或更多地块堆叠在一起时分配垂直空间。由于您在这里只有一排地块,rel_heights因此什么也不做。例如,运行plot_grid(main.plot, sub.plot, rel_heights=c(2,1), ncol=1)以查看rel_heights工作原理。

要获得所需的布局,您可以在右侧图的顶部堆叠一个空的 grob(图形对象),这将导致右侧图占据可用垂直空间的一半。在下面的代码中,我们使用arrangeGrobfromgridExtra包将 a 堆叠nullGrob()sub.plot. 然后我们将arrangeGrobnext的输出放在main.plot. 默认情况下,两个 grobsarrangeGrob将各自占据垂直空间的一半。但是,例如,如果您决定要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))

在此处输入图像描述

于 2016-12-31T04:12:49.607 回答