复现《nature communications》图表(四):ggplot画多组富集气泡图

还是NC的文章,这次我们探讨下Figure2a,这个富集气泡图可能平平无奇,但是仔细看发现它的横坐标是4个分组。这就值得去学习了,同时复现这个气泡图是为了任何气泡图达到举一反三的效果。

图片

首先自己构建一个数据,包含GO terms、分组和P值,读入文件。

setwd("F:/生物信息学")
A <- read.csv("GO.csv",header=T)
图片

为了好分组,将GO term设置为因子,顺序不变,然后画图!


library(forcats)
A$Description <- as.factor(A$Description)
A$Description <- fct_inorder(A$Description)

ggplot(A, aes(Group, Description)) +
  geom_point(aes(color=Padj, size=GeneRatio))+theme_bw()+
  theme(panel.grid = element_blank(),
        axis.text.x=element_text(angle=90,hjust = 1,vjust=0.5))+
  scale_color_gradient(low='#6699CC',high='#CC3333')+
  labs(x=NULL,y=NULL)+guides(size=guide_legend(order=1))
图片

这个图看起来差在y轴的文字在左边,用scale_y_discrete函数将其放在右边,之后把legend也放在上面。

ggplot(A, aes(Group, Description)) +
  geom_point(aes(color=Padj, size=GeneRatio))+theme_bw()+
  theme(panel.grid = element_blank(),
        axis.text.x=element_text(angle=90,hjust = 1,vjust=0.5))+
  scale_color_gradient(low='#6699CC',high='#CC3333')+
  labs(x=NULL,y=NULL)+guides(size=guide_legend(order=1))+
  theme(legend.direction = "horizontal", legend.position = "top")+#legend水平置于顶部
  scale_y_discrete(position = "right")#y轴文字放右侧
图片

接下来就是添加分组了,方法与我们之前ggplot画热图一样《热图5:ggplot2画热图及个性化修饰》,同样的方法,最后将其通过aplot包与气泡图组合在一起。


cluster <- A$Description %>% as.data.frame() %>%
  mutate(group=rep(c("cluster1","cluster2","cluster3"),
                   times=c(13,12,13))) %>%
  mutate(p="")%>%
  ggplot(aes(p,.,fill=group))+
  geom_tile() + 
  scale_y_discrete(position="right") +
  theme_minimal()+xlab(NULL) + ylab(NULL) +
  theme(axis.text.y = element_blank(),
        axis.text.x =element_text(
          angle =90,hjust =0.5,vjust = 0.5))+
  labs(fill = "Pathway")

一般做富集的气泡图用gene ratio表示气泡大小,颜色表示P。这篇文章中用logP表示气泡大小,fold表示颜色。我们可以在原来的数据基础上构建logP然后作图,效果一样!


A$fold <- ''
A$fold <- -log(A$GeneRatio)

p1 <-ggplot(A, aes(Group, Description)) +
  geom_point(aes(color=fold, size=LOGP))+theme_bw()+
  theme(axis.text.x=element_text(angle=90,hjust = 1,vjust=0.5))+
  scale_color_gradient(low='#6699CC',high='#CC3333')+
  labs(x=NULL,y=NULL)+guides(size=guide_legend(order=3))+
  scale_y_discrete(position = "right")
p1%>%
  insert_left(cluster, width = .05)
图片

ggplot真的很强大,具有参数可调整性的优势。这个复现我们不仅仅是为做出这么一张图,更重要的是要去仔细感受ggplot画气泡图及其调整的细节,钻研明白这些内容,我想很多问题就会迎刃而解,自己动手解决问题的能力也会有所提高!

祝学习愉快!

你可能感兴趣的:(复现《nature communications》图表(四):ggplot画多组富集气泡图)