ggplot如何用不同小数位的y轴修复绘图区域?

时间:2018-05-16 23:40:16

标签: r ggplot2

我一直在尝试使用相同的绘图区域(所有点所在的区域,而不是整个图片)生成散点图。这是我一直在使用的代码:

p = list()
for(i in 8:38){
  name = colnames(allbbb)[i]
  ylabel = bquote(atop(bold(.(name)),log2(FC)))
  xlabel = bquote(atop(bold("DNA Lesions"),log2(FC)))
  corre = paste0("r = ",round(cor(allbbb[,42],allbbb[,i]),digits=2))
  ptemp = ggplot(allbbb,aes(x=allbbb[,42],allbbb[,i])) + 
    geom_point(alpha=0.15,size=0.3,shape=19) +
    xlim(quantile(allbbb[,42],0.005), quantile(allbbb[,42],0.995)) + 
    geom_smooth(method="lm") +
    ylim(quantile(allbbb[,i],0.005),quantile(allbbb[,i],0.995)) + 
    theme_bw() +
    annotate(geom="text", x=quantile(allbbb[,42],0.99), y=quantile(allbbb[,i],0.9), 
             label=corre, size=5, fontface="bold") +
    ylab(ylabel) + xlab(xlabel) + 
    theme(axis.text= element_text(size=15),axis.title=element_text(size=20))
  p[[i]] <- ptemp
  #ggsave(paste0(name,"sc.png"))
}

ggarrange(p[[7]],p[[8]],p[[9]],p[[10]],p[[11]],p[[12]],p[[13]],p[[14]],
          p[[15]],p[[16]],p[[17]],p[[18]],p[[19]],p[[20]],p[[21]],p[[22]],
          p[[23]],p[[24]],p[[25]],p[[26]],p[[27]],p[[28]],p[[29]],p[[30]],
          p[[31]],p[[32]],p[[33]],p[[34]],p[[35]],p[[36]],p[[37]],p[[38]], ncol=4,nrow=8)
ggsave("allscatterplot.png",width=18,height=26.4,units="in")

但是,由于图中小数位数的不同,我注意到实际的绘图区域在图中略有不同。

下面是一个例子:

SS of Plot

我尝试在scale_y_continuous()中使用函数来使所有内容都具有相同的d.p.在y轴但由于我需要ylim,它并不真正起作用。有人可以提出一些方法来解决这个问题吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

假设ggarrange来自ggpubr包:

ggarrange(plotlist=p[7:38], ncol=4, nrow=8, align="hv") 

我没有对此进行测试,因为您的示例不可重复。但是,align="hv"应该考虑面板大小问题。

使用plotlist参数可减少指定要包含哪些图表所需的输入量。

此外,为了将来参考,您无需同时使用ylimscale_y_continuous。您也可以在scale_y_continuous中指定限制(请注意,您只需拨打quantile一次):

scale_y_continuous(limits = quantile(allbbb[,i], c(0.005,0.995))