使用R语言绘制富集条形图,轻松分析基因表达数据

news2024/11/20 12:43:59

一、引言

富集分析(enrichment analysis)是一种生物信息学方法,它可以帮助我们识别基因或其他的生物实体在某个特定的类别中过度表示的趋势。通俗来说,富集分析通过将基因分类到特定的集合中,然后根据基因在集合中的分布和总体分布的比较,来寻找哪些集合与特定的生物过程、疾病或其他功能相关联。其中一种常用的可视化形式就是富集条形图(enrichment bar plot)。它可以显示分析结果并解释生物学上富集通路的各种特征。

为了实现富集分析和绘制富集条形图,我们可以使用R语言。R语言是一种免费开源的编程语言和软件环境,用于统计计算,绘制图表和数据分析。它在大量生物信息学数据分析中得到应用,并成为当前技术最前沿的生物信息学研究领域。如此优势的R语言支持,是进行富集分析和富集条形图的理想之选。

二、富集分析与富集条形图

2.1 从富集分析到富集条形图:一个综述性的介绍

富集分析广泛用于生物信息学中的基因组学、转录组学以及蛋白质组学等多个方面。富集分析旨在理解基因或蛋白质组的基本生物学特性以及在某些条件或环境下的行为特征。在生物医学研究中,富集分析通常用于揭示不同组的基因表达谱上的差异,并帮助确定基因表达在特定疾病或生物过程中的生物学作用。

富集条形图是一种重要的富集分析可视化工具,它能帮助我们对结果进行更清晰、更准确、更生动的展示。富集条形图可以显示各个功能通路在分析过程中的显著程度,并对显著的富集通路进行分类。这种可视化工具可以为数据分析者提供更详细、更准确、更全面的信息,从而为研究和实践提供更丰富的分析思路。

2.2 介绍什么是富集分析和富集条形图

富集分析是一种生物信息学方法。它将特定基因或细胞信号转化为相应的通路或基本生物过程,进而对它们的富集情况进行比较分析。富集分析的主要步骤包括:选取样本、收集分析数据、比较基因表达差异、寻找生物学趋势、验证检测结果等。

富集条形图是一种可视化富集分析结果的工具。通常情况下,富集条形图按富集度递减的顺序显示富集通路,对应的颜色告诉你通路的显著水平有多高。此外,绘制富集条形图时,还可以根据不同的颜色映射,显示富集通路的基因数目和富集通路的显著水平,更直观地为数据提供了参考。

2.3 讲述富集条形图的组成和绘制方法

富集条形图主要由两部分组成——Y轴和X轴。其中,Y轴按照研究通路的名称递减排序,而X轴则显示各个研究通路在不同样本中的富集标准。此外,富集条形图还包括条形图、注释分布图、颜色条、关键的样本名称和注释说明。

富集条形图的绘制主要分为三个步骤:首先是收集数据,其次是进行基本数据分析,最后是使用R语言进行绘图。在这个过程中,需要绘制的图表包括函数和通路富集度、显著性水平和节点数的折线图,以及富集条形图本身。

三、数据集

该数据集是GOplot自带的数据集,可以用来学习Go富集分析和可视化,接下来我们引入数据集

library(GOplot)
data(EC)
library(RColorBrewer)
library(ggplot2)
library(dplyr)

数据集展示:

# 查看数据
> head(EC$eset)
    Gene_Symbol     Brain_A     Brain_B    Brain_C     Heart_A     Heart_B     Heart_C
1 0610007P14Rik  0.58382130  0.81117820 -0.2480545 -0.67075443 -0.58700850 -0.65176487
2 0610008F07Rik  0.13262606  0.11230135  0.3122339  0.10193062 -0.06617737  0.09765196
3 0610009B22Rik -0.09357643 -0.20074654  0.2505083 -1.02136140 -0.18762684 -0.69150734
4 0610009D07Rik  0.06708336  0.12616920 -0.1234570 -0.74400520 -0.42762280 -0.43724203
5 0610009O20Rik  0.02191877  0.13460398  0.2718530  0.27460957 -0.07751560  0.00000000
6 0610010F05Rik -0.10588837 -0.05568028  0.0115509  0.06084633 -0.18752098  0.01155090

# 查看数据
> head(EC$genelist)
       ID    logFC   AveExpr        t  P.Value adj.P.Val        B
1 Slco1a4 6.645388 1.2168670 88.65515 1.32e-18  2.73e-14 29.02715
2 Slc19a3 6.281525 1.1600468 69.95094 2.41e-17  2.49e-13 27.62917
3     Ddc 4.483338 0.8365231 65.57836 5.31e-17  3.65e-13 27.18476
4 Slco1c1 6.469384 1.3558865 59.87613 1.62e-16  8.34e-13 26.51242
5  Sema3c 5.515630 2.3252117 58.53141 2.14e-16  8.81e-13 26.33626
6 Slc38a3 4.761755 0.9218670 54.11559 5.58e-16  1.76e-12 25.70308

# 查看数据
> head(EC$david)
  Category         ID                             Term
1       BP GO:0007507                heart development
2       BP GO:0001944          vasculature development
3       BP GO:0001568         blood vessel development
4       BP GO:0048729             tissue morphogenesis
5       BP GO:0048514       blood vessel morphogenesis
6       BP GO:0051336 regulation of hydrolase activity
                                             Genes
1       DLC1, NRP2, NRP1, EDN1, PDLIM3, GJA1, TTN, GJA5, ZIC3, TGFB2, CERKL, GATA6, COL4A3BP, GAB1, SEMA3C, MKL2, SLC22A5, MB, PTPRJ, RXRA, VANGL2, MYH6, TNNT2, HHEX, MURC, MIB1, FOXC2, FOXC1, ADAM19, MYL2, TCAP, EGLN1, SOX9, ITGB1, CHD7, HEXIM1, PKD2, NFATC4, PCSK5, ACTC1, TGFBR2, NF1, HSPG2, SMAD3, TBX1, TNNI3, CSRP3, FOXP1, KCNJ8, PLN, TSC2, ATP6V0A1, TGFBR3, HDAC9
2 GNA13, ACVRL1, NRP1, PGF, IL18, LEPR, EDN1, GJA1, FOXO1, GJA5, TGFB2, WARS, CERKL, APOE, CXCR4, ANG, SEMA3C, NOS2, MKL2, FGF2, RAPGEF1, PTPRJ, RECK, EFNB2, VASH1, PNPLA6, THY1, MIB1, NUS1, FOXC2, FOXC1, CAV1, CDH2, MEIS1, WT1, CDH5, PTK2, FBXW8, CHD7, PLCD1, PLXND1, FIGF, PPAP2B, MAP2K1, TBX4, TGFBR2, NF1, TBX1, TNNI3, LAMA4, MEOX2, ECSCR, HBEGF, AMOT, TGFBR3, HDAC7
3        GNA13, ACVRL1, NRP1, PGF, IL18, LEPR, EDN1, GJA1, FOXO1, GJA5, TGFB2, WARS, CERKL, APOE, CXCR4, ANG, SEMA3C, NOS2, MKL2, FGF2, RAPGEF1, PTPRJ, RECK, VASH1, PNPLA6, THY1, MIB1, NUS1, FOXC2, FOXC1, CAV1, CDH2, MEIS1, WT1, CDH5, PTK2, FBXW8, CHD7, PLCD1, PLXND1, FIGF, PPAP2B, MAP2K1, TBX4, TGFBR2, NF1, TBX1, TNNI3, LAMA4, MEOX2, ECSCR, HBEGF, AMOT, TGFBR3, HDAC7
4                                   DLC1, ENAH, NRP1, PGF, ZIC2, TGFB2, CD44, ILK, SEMA3C, RET, AR, RXRA, VANGL2, LEF1, TNNT2, HHEX, MIB1, NCOA3, FOXC2, FOXC1, TGFB1I1, WNT5A, COBL, BBS4, FGFR3, TNC, BMPR2, CTNND1, EGLN1, NR3C1, SOX9, TCF7L1, IGF1R, FOXQ1, MACF1, HOXA5, BCL2, PLXND1, CAR2, ACTC1, TBX4, SMAD3, FZD3, SHANK3, FZD6, HOXB4, FREM2, TSC2, ZIC5, TGFBR3, APAF1
5                                                                                            GNA13, CAV1, ACVRL1, NRP1, PGF, IL18, LEPR, EDN1, GJA1, CDH2, MEIS1, WT1, TGFB2, WARS, PTK2, CERKL, APOE, CXCR4, ANG, SEMA3C, PLCD1, NOS2, MKL2, PLXND1, FIGF, FGF2, PTPRJ, TGFBR2, TBX4, NF1, TBX1, TNNI3, PNPLA6, VASH1, THY1, NUS1, MEOX2, ECSCR, AMOT, HBEGF, FOXC2, FOXC1, HDAC7
6                                                                               CAV1, XIAP, AGFG1, ADORA2A, TNNC1, TBC1D9, LEPR, ABHD5, EDN1, ASAP2, ASAP3, SMAP1, TBC1D12, ANG, TBC1D14, MTCH1, TBC1D13, TBC1D4, TBC1D30, DHCR24, HIP1, VAV3, NOS1, NF1, MYH6, RICTOR, TBC1D22A, THY1, PLCE1, RNF7, NDEL1, CHML, IFT57, ACAP2, TSC2, ERN1, APAF1, ARAP3, ARAP2, ARAP1, HTR2A, F2R
     adj_pval
1 0.000002170
2 0.000010400
3 0.000007620
4 0.000119000
5 0.000720000
6 0.001171166

# 查看数据
> head(EC$genes)
     ID      logFC
1  PTK2 -0.6527904
2 GNA13  0.3711599
3  LEPR  2.6539788
4  APOE  0.8698346
5 CXCR4 -2.5647537
6  RECK  3.6926860

# 查看数据
> EC$process
[1"heart development"        "phosphorylation"          "vasculature development"  "blood vessel development" "tissue morphogenesis"     "cell adhesion"           
[7"plasma membrane"

2.2 数据预处理

使用cirlce_dat函数整合GO注释结果数据和基因差异表达分析数据结合起来,形成作图对象。

circ <- circle_dat(EC$david, EC$genelist)
circ_filter <- circ %>% filter(category == "MF")
head(circ)

结果展示:

  category         ID              term count  genes      logFC adj_pval     zscore
1       BP GO:0007507 heart development    54   DLC1 -0.9707875 2.17e-06 -0.8164966
2       BP GO:0007507 heart development    54   NRP2 -1.5153173 2.17e-06 -0.8164966
3       BP GO:0007507 heart development    54   NRP1 -1.1412315 2.17e-06 -0.8164966
4       BP GO:0007507 heart development    54   EDN1  1.3813006 2.17e-06 -0.8164966
5       BP GO:0007507 heart development    54 PDLIM3 -0.8876939 2.17e-06 -0.8164966
6       BP GO:0007507 heart development    54   GJA1 -0.8179480 2.17e-06 -0.8164966

三、数据可视化

3.1 常规富集条形图(ggplot2)

#先自定义主题:
mytheme <- theme(
    axis.title = element_text(size = 14),
    axis.text = element_text(size = 12),
    plot.title = element_text(size = 15,
    hjust = 0.5,
    face = "bold"),
    legend.title = element_text(size = 14),
    legend.text = element_text(size = 12),
    plot.margin = margin(t = 5.8,
    r = 12,
    l = 6.5,
    b = 6.5)
)
#常规富集条形图绘图:
p <- ggplot(data = circ_filter, aes(x = count, y = ID, fill = -log10(adj_pval))) +
scale_fill_distiller(palette = "RdPu",direction = 1) + 
geom_bar(stat = "identity", width = 0.8) + 
labs(x = "count", y = "", title = "KEGG富集图") + 
theme_bw() + mytheme
p

3.2 组合图(ggplot2)

上图看起来还是不是那么明显,我们可以使用组合图的形似来看。

bar <- ggplot(data = circ_filter,aes(x = ID, y = -log10(adj_pval))) +
geom_bar(stat = "identity", width = 0.8, fill = 'pink') +
scale_y_continuous() +
labs(x = "", y = "-log10(adj_pval)", title = "KEGG富集图") +
theme_classic() + mytheme +
coord_flip()
bar
#绘制折线散点图展示count数目:
line <- ggplot(data = circ_filter, aes(x = ID, y = count, group = 1)) +
geom_line(color = "green", cex = 0.5) +
geom_point(size = 2) +
scale_y_continuous() +
labs(x = "", y = "Count", title = "KEGG富集图") +
theme_classic() + mytheme +
coord_flip()
line
# 组合图
bar_line <- ggplot() +
geom_bar(data = circ_filter, aes(x = ID, y = -log10(adj_pval)),
stat = "identity", width = 0.8, fill = 'pink') +
scale_y_continuous(
expand = c(0,0),
sec.axis = sec_axis(~. /1.5, 
name = 'Count')) + #辅助轴刻度线断点
geom_line(data = circ_filter, aes(x = ID, y = count*1.5, group = 1),
color = "blue", cex = 0.5) +
geom_point(data = circ_filter, aes(x = ID, y = count*1.5),
size = 2) +
labs(x = "", y = "-log10(pvalue)", title = "KEGG富集图") +
theme_classic() +
mytheme +
coord_flip() #由于geom_line函数绘制折线是按照变量在x轴水平方向顺序进行连接,因此这里把x/y轴对应变量交换了一下,最后再通过坐标翻转回来
bar_line

3.3 GOplot绘制富集条形图

  • 所有种类
GOBar(circ, display = 'multiple', zsc.col = c('blue''white''red')) 

是不是觉得有写不清晰,看不出x坐标的标注。没关系,我们可以选择性展示其中感兴趣的部分。

  • 展示特定种类
GOBar(subset(circ, category == 'MF'))

这样就很清晰了!

四、富集条形图的应用

  • 利用富集条形图解析基因表达的差异

为了探索不同表达谱中的生物学特性和功能,富集条形图常常被用于测量什么样的通路在某些样本中显著富集。这种分析非常适用于探索基因表达差异性,探索基因与功能通路之间的相关性。将不同层次的数据进行分析,也可以为更深层次的功能研究提供指导性意见。

  • 描述如何从富集条形图中识别重要的通路或过程

富集条形图可以帮助我们识别在数据集中显著富集的生物过程或通路。在一张富集条形图中,更重要的富集通路会持续出现,并生成更大的富集度。此时,人们应该进一步分析这些重要的富集通路,并从中确定与数据集特性相关的背景和性质。

  • 强调富集条形图在生物大数据处理中的重要性。

富集条形图在生物大数据分析中起着核心地位,能够对基因、蛋白质、代谢物等高通量数据进行注释。随着大数据时代的到来,富集分析与富集条形图成为了分析工具的基石之一,如生物医学信息学中的疾病诊断、药物研发、基因功能验证等等,都需要富集条形图进行数据展示,以辅助我们进行快速准确的数据分析与解读。

*「未经许可,不得以任何方式复制或抄袭本篇文章之部分或全部内容。版权所有,侵权必究。」

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/680660.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

万字长文带你深入理解JavaNIO并手动实现多人聊天室

NIO 网络编程 代码已同步至GitCode&#xff1a;https://gitcode.net/ruozhuliufeng/java-project.git Java NIO简介 IO概述 ​ IO的操作方式通常分为几种&#xff1a;同步阻塞BIO、同步非阻塞NIO、异步非阻塞AIO。 ​ &#xff08;1&#xff09;在JDK1.4之前&#xff0c;我们…

哈希表/散列表(HashTable)c++实现

目录 哈希表实现的思想 除留余数法 哈希冲突 第一种方法&#xff1a;探测法实现哈希表 探测法的思想 结点类 插入数据(insert) 冲突因子 数据扩容 哈希值 插入的代码实现以及哈希类 查找数据(find) 删除数据(erase) 第二种方法&#xff1a;拉链法实现哈希表 …

Kotlin~迭代器模式

概念 提供一种遍历集合元素的方法&#xff0c;而不暴露集合内部的实现。 角色介绍 iterator 迭代器接口: 定义访问和遍历集合元素的接口&#xff0c;一般包含next和hasNext方法。concrete iterator 具体迭代器: 实现迭代器接口&#xff0c;迭代器的核心逻辑实现。aggregate …

极致呈现系列之:Echarts热力图的神奇光晕

目录 什么是热力图热力图的特性及应用场景热力图的特性热力图的应用场景 Echarts中热力图的常用属性vue3中创建热力图 什么是热力图 热力图&#xff08;Heatmap&#xff09;是一种基于颜色映射的数据可视化图表&#xff0c;用于展示数据点的密度和分布情况。它使用不同的颜色强…

RT-Thread-10-线程优先级翻转

线程优先级翻转 前面讲到信号量和互斥量&#xff0c;二者有些区别&#xff1a; 信号量&#xff0c;可以在任何线程&#xff08;以及中断&#xff09;释放&#xff0c;用于同步&#xff0c;线程只在获得许可时才可以运行&#xff0c;强调的是运行步骤&#xff1b; 互斥量&#…

科技项目验收测试规范有哪些?

随着科技的不断发展和进步&#xff0c;越来越多的科技项目被投入使用。为了保证这些科技项目的质量&#xff0c;需要进行验收测试。科技项目验收测试是一项非常重要的工作&#xff0c;其结果对项目的质量和功能正常使用有着直接的影响。本文将就科技项 目验收测试规范和第三方软…

基于51单片机设计的公交车LED屏

一、项目介绍 为了提高公交车站点信息的实时性和准确性,方便乘客及时了解公交车到站信息,从而提高公交出行的便利性和舒适度。传统的公交车到站信息是通过人工喊话或者静态的站牌来实现的,这种方式存在信息不及时、不准确、不方便等问题。当前设计基于STC89C52单片机和MAX7…

PyQt6中文手册

PyQt6中文手册 一、PyQt6 简介 最后更新于 2021.04.22 本教程是 PyQt6 的入门教程。本教程的目的是让您开始使用 PyQt6 库。 关于 PyQt6 PyQt6 Digia 公司的 Qt 程序的 Python 中间件。Qt库是最强大的GUI库之一。PyQt6的官网&#xff1a;www.riverbankcomputing.co.uk/new…

2023年企业应该关注的10种AI攻击类型

2023年&#xff0c;热度很高的一个话题莫不是生成式AI和chat GPT了。但是&#xff0c;人工智能&#xff08;AI&#xff09;技术的应用安全威胁都已经开始显现。安全研究人员表示&#xff0c;在AI技术快速应用发展过程中&#xff0c;其安全性也面临诸多挑战。为了防范AI技术大规…

【C++】哈希unordered系列容器的模拟实现

文章目录 一、哈希表的模拟实现&#xff08;开散列&#xff09;1. 开散列的概念2. 开散列的节点结构3. 开散列的插入删除与查找4. 开散列整体代码实现 二、unordered系列容器的封装实现(开散列)1. 迭代器2. unordered_set和unordered_map的封装实现3. 哈希表整体源码 一、哈希表…

Jacoco代码覆盖率测试

​欢迎光临我的博客查看最新文章: https://river106.cn 1、简介 JaCoCo(Java Code Coverage)是一个开源的覆盖率工具&#xff0c;它针对的开发语言是java&#xff0c;其使用方法很灵活&#xff0c;可以嵌入到Ant、Maven中。 很多第三方的工具提供了对JaCoCo的集成&#xff0c;…

Java设计模式之结构型-装饰器模式

目录 一、基本概念 二、角色设计 三、代码实现 四、总结 一、基本概念 装饰器模式是指不必在改变原有的类和不使用继承的情况下&#xff0c;动态扩展一个对象的功能。 二、角色设计 角色描述抽象构件是一个接口或者抽象类&#xff0c;定义我们最核心的对象基础构件抽象构…

GD32 SPI 查询方式和DMA方式在全双模式下效率区别

最近在使用SPI的时候&#xff0c;遇到了一些数据传输效率问题&#xff0c;在此记录自己学习过程。SPI的基础知识这里就不在讲述了&#xff0c;直接分析SPI查询方式和DMA方式的效率问题。这里使用的芯片是GD32F303CC。 SPI以查询方式进行全双工通信 1.查询手册&#xff0c;SPI…

java——网络编程

文章目录 网络通信协议1. TCP/IP协议2. HTTP协议 Socket编程1.创建Socket对象2.获取输入输出流3.发送数据4.接收数据5.关闭Socket连接 NIO编程1.创建Channel2.创建Buffer3.从Channel中读取数据4.写入数据到Channel中5.关闭Channel和Stream Java网络编程是使用Java语言实现计算机…

Spark7-9

7. Spark中的一些重要概念 7.1 Application 使用SparkSubmit提交的个计算应用&#xff0c;一个Application中可以触发多次Action&#xff0c;触发一次Action产生一个Job&#xff0c;一个Application中可以有一到多个Job 7.2 Job Driver向Executor提交的作业&#xff0c;触发…

没想到,老刘是逃离北上广的那波人

我今天跟老刘调试的时候&#xff0c;我问了老刘一个问题——我问你工作这么久了&#xff0c;有没有遇到什么可以让你财富自由的机会。 老刘那个时候正在焊板子&#xff0c;背着我&#xff0c;他抬起头又低了下去&#xff0c;然后说「我是有一次机会了&#xff0c;但是没有抓住&…

MySQL-SQL存储函数以及触发器详解

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️努力不一定有回报&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xf…

PyTorch翻译官网教程3-DATASETS DATALOADERS

官网链接 Datasets & DataLoaders — PyTorch Tutorials 2.0.1cu117 documentation 数据集和数据加载器 处理样本数据的代码可能会变得混乱并且难以维护。理想情况下&#xff0c;我们希望我们的数据集代码与模型训练代码解耦&#xff0c;以获得更好的可读性和模块化。PyT…

轻松了解工作与学习必备的版本控制+Git,全程舒适~

目录 一、版本控制 二、版本控制器 三、Git 四、项目实操 第一步 在github上创建一个新的远程仓库 第二步 克隆到本地文件夹 第三步 IDEA&#xff08;PyCharm为例&#xff09;集成Git 一、版本控制 概念&#xff1a;版本控制是指对软件开发过程中各种程序代码、配置文件…

【spring cloud学习】4、创建服务提供者

注册中心Eureka Server创建并启动之后&#xff0c;接下来介绍如何创建一个Provider并且注册到Eureka Server中&#xff0c;再提供一个REST接口给其他服务调用。 首先一个Provider至少需要两个组件包依赖&#xff1a;Spring Boot Web服务组件和Eureka Client组件。如下所示&…