ggplot2|绘制GO富集柱形图
时间:2022-07-22
本文章向大家介绍ggplot2|绘制GO富集柱形图,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
生信分析中经常会得到一些基因,然后做GO富集分析,达到对基因进行注释和分类的目的。
本文利用R语言的ggplot2包,从头带您绘制可发表级别的GO富集分析结果图。
一 载入数据集和R包
利用各种生信工具得到富集分析结果,数据列可能不一致,但关键几列都有。
library(ggplot2)
data <- read.csv("GO_enrichment_significant.csv",header=TRUE)
head(data)
二 对上述GO结果绘制基础bar图
参照之前ggplot2使用方法,更改geom即可绘制简单的bar图,按照GO_category分组颜色
ggplot(data=data, aes(x=GO_term,y=Num_of_symbols_in_list_in_GO, fill=GO_category)) + geom_bar(stat="identity", width=0.8)
可看出和文献中的差距较大,体现在以下几个方面:
A:标题,坐标轴“业余”;
B:GO_category顺序未按照输入文件,相同GO_category没在一起;
C:横坐标label太长,重叠在一起。
三 “细节”调整GO结果bar图
3.1 坐标轴调整策略
#将GO_term设定为factor即可按照顺序输出
GO_term_order=factor(as.integer(rownames(data)),labels=data$GO_term)
ggplot(data=data, aes(x=GO_term_order,y=Num_of_symbols_in_list_in_GO, fill=GO_category)) + geom_bar(stat="identity", width=0.8) + coord_flip() + xlab("GO term") + ylab("Num of Genes") + theme_bw()
好像有一点能看了,尝试其他策略。
3.2 调整横坐标label策略
将label调整成一定角度倾斜
COLS <- c("#66C3A5", "#8DA1CB", "#FD8D62")
ggplot(data=data, aes(x=GO_term_order,y=Num_of_symbols_in_list_in_GO, fill=GO_category)) +
geom_bar(stat="identity", width=0.8) +
scale_fill_manual(values = COLS) + theme_bw() +
xlab("GO term") + ylab("Num of Genes") + labs(title = "The Most Enriched GO Terms")+ theme(axis.text.x=element_text(face = "bold", color="gray50",angle = 70,vjust = 1, hjust = 1 ))
嗯 ,标签太长溢出,采取保留GO-term的前三个单词(可以其他策略)后面...代替,可以excel或者R function 解决。
3.3 调整label长度后绘图
GO_term_order=factor(as.integer(rownames(data)),labels=labels)
COLS <- c("#66C3A5", "#8DA1CB", "#FD8D62")
ggplot(data=data, aes(x=GO_term_order,y=Num_of_symbols_in_list_in_GO, fill=GO_category)) +
geom_bar(stat="identity", width=0.8) +
scale_fill_manual(values = COLS) + theme_bw() +
xlab("GO term") + ylab("Num of Genes") + labs(title = "The Most Enriched GO Terms")+ theme(axis.text.x=element_text(face = "bold", color="gray50",angle = 70,vjust = 1, hjust = 1 ))
好了 ,这样好像比较顺眼了,不管什么软件工具得到的GO富集结果,都可以绘图,然后,,,发文章去吧。。。
- 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 数组属性和方法
- REST服务,使用Dubbo还是SpringMVC?
- Linux系统下Anaconda的安装和使用教程
- Flutter Dojo设计之道——利用Github打造完善的开源项目
- 最强 Redis 客户端 lettuce 已支持 Redis6客户端
- 还在手动整理数据库文档?试试这个工具
- Elasticsearch 常见的 8 种错误及最佳实践
- Spark流式状态管理
- Scala中的IO操作及ArrayBuffer线程安全问题
- 设计模式之单例模式
- Roslyn 理解 msbuild 的清理过程
- gorm聚合查询group结合join和count
- 潘石屹用Python解决100个问题 | 集合
- Catalina 默认使用zsh了,你可习惯
- LeetCode 354 Russian Doll Envelopes (动态规划)
- 设计模式之原型模式