我一直在尝试使用相同的绘图区域(所有点所在的区域,而不是整个图片)生成散点图。这是我一直在使用的代码:
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")
但是,由于图中小数位数的不同,我注意到实际的绘图区域在图中略有不同。
下面是一个例子:
我尝试在scale_y_continuous()
中使用函数来使所有内容都具有相同的d.p.在y轴但由于我需要ylim,它并不真正起作用。有人可以提出一些方法来解决这个问题吗?
非常感谢!
答案 0 :(得分:0)
假设ggarrange
来自ggpubr
包:
ggarrange(plotlist=p[7:38], ncol=4, nrow=8, align="hv")
我没有对此进行测试,因为您的示例不可重复。但是,align="hv"
应该考虑面板大小问题。
使用plotlist
参数可减少指定要包含哪些图表所需的输入量。
此外,为了将来参考,您无需同时使用ylim
和scale_y_continuous
。您也可以在scale_y_continuous
中指定限制(请注意,您只需拨打quantile
一次):
scale_y_continuous(limits = quantile(allbbb[,i], c(0.005,0.995))