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()
最后结果图:
- 无意禁止使用:英伟达官方回应GeForce软件条款更改
- Ext JS 6 新特性和工具
- 为你的WordPress 博客文章页面增加多彩排版条
- java: web应用中不经意的内存泄露
- java: web应用中不经意的内存泄露
- velocity模板引擎学习(4)-在standalone的java application中使用velocity及velocity-tools
- mac上开启ftp
- Web前端开发的四个阶段
- 使用Visual Studio 2015 开发ASP.NET MVC 5 项目部署到Mono/Jexus
- 关于把本地应用封装成windows app发布审核通不过的问题
- java并发编程学习:用 Semaphore (信号量)控制并发资源
- java并发编程学习: ThreadLocal使用及原理
- 使用Autofac IOC组织多项目应用程序
- 国内首个“人工智能与变革管理研究院”成立
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 强大的 Stream API(二)
- 无限想象空间,用Python玩转3D人体姿态估计
- 300亿美元,AMD为什么要买Xilinx?
- Angular5.0.0新特性
- 用Python实现坦克大战游戏 | 干货贴
- android studio 3.0 升级 项目遇到的问题及更改思路(问题小结)
- Android Studio 3.0被调方法参数名提示的取消方法
- Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
- 解决python多线程报错:AttributeError: Can't pickle local object问题
- TensorFlow2.1.0最新版本安装详细教程
- Android仿京东首页秒杀倒计时
- 超实用的android自定义log日志输出工具类
- spring进行mock测试
- RecyclerView实现纵向和横向滚动
- Android ListView列表视图的使用方法