ggplot2画KEGG富集柱形图

时间:2022-07-22
本文章向大家介绍ggplot2画KEGG富集柱形图,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

在做项目分析的时候遇到过一个问题,就是有个老师想将好几张功能富集结果中的柱状图的横坐标的范围全部调整为一样的,一般画这个柱状图都是用Y叔的clusterprofiler包中的barplot函数对使用这个包的功能富集结果进行一键绘图,超级简单方便。但是当我去查找这个函数的调整坐标的参数时:

barplot.enrichResult {enrichplot}  R Documentation
barplot
Description
barplot of enrichResult

Usage
## S3 method for class 'enrichResult'
barplot(
  height,
  x = "Count",
  color = "p.adjust",
  showCategory = 8,
  font.size = 12,
  title = "",
  ...
)

也就是说这个函数里面没有调整坐标范围的参数,不知道是不是因为我没找到还是什么,反正我找了好久没有找到,我有点方(如果知道的小伙伴可以下面留言告诉我)。

后面我觉得还是自己用ggplot2画吧,反正这个包里面一键绘图也是根据ggplot2来的。

这个图与一般的函数barplot画出来的不一样的地方在于它的颜色,这张图里面的颜色反应的是fdr的大小,是一个连续值,ggplot2可以将连续值映射到到颜色上,横坐标是通路中感兴趣基因的个数。

下面用一套KEGG富集分析的结果来展示绘图的过程,下表展示的KEGG富集分析结果也是利用Y叔的clusterprofiler包得到的。

#加载ggplot2包
library(ggplot2)
#一键清除
rm(list=ls())
#读取功能富集结
kegg <- read.csv("KEGG-enrich.csv",stringsAsFactors=F)
#对富集结果按照p.adjust进行从小到大排序,保证最显著的通路在前
kegg <- kegg[order(kegg$p.adjust),]

#这里画图只展示top10的通路
kegg <- kegg[1:10,]

#提取每条通路里面差异表达的基因数
top10 <- data.frame(kegg$Description,kegg$Count ,kegg$p.adjust)
colnames(top10) <- c("Description","count","padj")

#fill=padj fill颜色填充,使用连续值padj
p <- ggplot(data=top10,aes(x=Description,y=count,fill=padj))

#coord_flip()颠倒坐标轴
p1 <- p + geom_bar(stat="identity") + coord_flip()
p2 <- p1 + theme(panel.background=element_rect(fill='transparent',color='gray'),
                 axis.text.y=element_text(color="black",size=12))


#ylim(0,30) 更改横坐标的范围这里坐标轴颠倒了,虽然看起来是x轴,但其实是y轴
p3 <- p2 + ylim(0,30) + scale_fill_gradient(low="red",high="blue")

p4 <- p3 + scale_x_discrete(limits=rev(top10[,1])) +labs(x="",y="",title="KEGG")

#输出为png格式的图片
png("KEGG_bar_plot.png",width=680,height=480)
print(p4)
dev.off()

#输出为pdf的文件
pdf("KEGG_bar_plot.pdf",width=9)
print(p4)
dev.off()

最后结果图: