科学网—转录因子富集分析 – 马省伟的博文

转录因子富集分析

已有 7814 次阅读
2018-11-13 22:23

|系统分类:科研笔记|
小麦, 富集分析, 转录因子

转录因子富集分析

转录因子因子富集分析背后的原理与GO,KEGG等富集分析是一样的。

这里还是使用Y叔的R包“clusterProfiler”。

首先我们要知道哪些基因是转录因子,并且属于哪一个转录因子家族。这个信息可以在这里下载(https://pan.baidu.com/s/12Zi-FvySMuaWyM2b9_2yuA)。这个文件中只需要两列,一列是转录因子家族的名字,一列是基因的名字。根据这个文件,整理出共有多少个转录因子家族,并给每个转录因子家族一个唯一的编号。将编号和名字存入一个新文件。

上面是所有转录因子,首先要筛选出在我们样品中表达的转录因子。

其次需要确认差异表达的转录因子。

最后需要一个转录因子编号和名字的对应文件。

样品中表达的转录因子,输入格式如下:共两列,第一列是转录因子家族编号,第二列是基因ID。其中编号是根据刚刚下载的文件整理而来。即一个基因家族有唯一一个编号。

差异表达的转录因子,输入格式如下:只有一列,基因的ID

image-20181113214653231

还需要是一个转录因子ID和名字的对应文件,输入格式如下:

准备好之后,直接套用GO分析的代码就好。

#设置工作目录
setwd("/Users/markdown/6DS/RNA-seq/DEG3")
#加载需要的R包
library("clusterProfiler")
library(ggplot2)
library(stringr)
#读入差异表达的转录因子,注意这里分隔符是"t",默认没有表头。如果是逗号分隔符请使用sep=","
gene <- read.csv("NS1vsCT_DEG_TF_list.txt",header=FALSE,sep="t")
gene <- as.factor(gene$V1)
#读入在样本中表达的转录因子,这一部分即是背景基因
term2gene <- read.csv("NS1vsCT_DEG_TF_background.txt",header=FALSE,sep="t")
#读入转录因子ID与名字对应的文件
term2name <- read.csv("~/Desktop/scripts/TF_analysis/TF_name.txt",header=FALSE,sep="t")
#进行富集分析
x <- enricher(gene,TERM2GENE=term2gene,TERM2NAME=term2name)
#富集分析结果保存到文件
out_file <- paste("DEG_NS1vsCT_HC_TF_enricher.out.txt",sep ="t")
write.csv(x,out_file)
#图片展示
dotplot(x, showCategory=10) 
#保存图片
ggsave(filename="DEG_NS1vsCT_HC_TF_enricher_dotplot.png",dpi=600)
dev.off()

结果展示

结果部分其实还有很多形式展示,具体的请见Y叔的R包clusterProfiler的说明。Y叔今年一月份在bioRxiv上在线一篇文章可以参考”clusterProfiler: An universal enrichment tool for functional and comparative study”。

Y叔文中展示的图片

其实基因家族也是可以做富集分析的。只要知道哪些基因属于哪个基因家族就可以了。但是目前,我还没找到相关的文件。唯一想到的是可以根据PFAM ID做,也即蛋白结构域的ID。

转载本文请联系原作者获取授权,同时请注明本文来自马省伟科学网博客。
链接地址:
http://blog.sciencenet.cn/blog-1094241-1146114.html

上一篇:普通小麦染色体着丝粒位置
下一篇:小麦有关的会议摘要——第十九届国际动植物基因组学大会

点击数:0

骨髓间充质干细胞经验总结- 实验基础- 百通生物—干细胞培养专题—丁香园会议频道

骨髓间充质干细胞经验总结

转载请注明来自丁香园
发布日期:2012-06-16 13:01 文章来源:丁香园

分享到:

收藏夹
新浪微博
腾讯微博
开心网
豆瓣社区
人人网

关键词:
 
点击次数:1030

2003年8月,为给大家提供一个网上交流干细胞研究经验的平台,我们干细胞版设立了骨髓间充质干细胞培养讨论区,经过近三个月的讨论学习,我们既学习丰富了自己的知识体系,也对间充质干细胞尤其是分离培养方面有了更为翔实的认识,为了大家阅读的方便,我们决定把本版中的相关内容,同时参考部分书目和文献,做一总结。

一、骨髓间充质干细胞的分离

目前常用的分离MSC的方法有全骨髓法和密度梯度离心法,全骨髓法即根据干细胞贴壁特性,定期换液除去不贴壁细胞,从而达到纯化MSC的目的。密度梯度离心法即根据骨髓中细胞成分比重的不同,提取单核细胞进行贴壁培养。随着对MSC表面抗原认识的深入,有人利用免疫方法如流式细胞仪法、免疫磁珠法等对其进行分离纯化,但经过流式或磁珠分选后的细胞出现了增殖缓慢等一些问题,加之耗费较大和技术的难度,在某种程度上限制了这些方法的广泛应用。

1.    直接培养法(全骨髓培养法)

1987年,Friedenstein等发现在塑料培养皿中培养的贴壁的骨髓单个核细胞在一定条件下可分化为成骨细胞、成软骨细胞、脂肪细胞和成肌细胞,而且这些细胞扩增20-30代后仍能保持其多向分化潜能,这类细胞即为骨髓间充质干细胞(BMSC),其工作对今后MSC的研究具有重要意义,不仅证实了骨髓MSC的存在,而且创建了一种体外分离和培养MSC的简便可行的方法,得到了广泛的应用。

culture-spirit采用直接贴壁法,24-36小时首次换液,换液时用PBS洗两次,7-10天传第一代,以后2-3天传代。培养基采用Hyclone的DMEM/F-12(1:1),血清是天津TBD的FBS(顶级),得到了较好的培养结果。

布兰卡根据自己培养大鼠MSC的经验,详细介绍了实验步骤:

(1)接种后60-80分钟,换液去除悬浮细胞

(2)原代培养24h,48h各换液一次

(3)观察细胞情况,在原代培养7天左右时,如观察到成片的典型形态的细胞,在瓶底用Marker笔标记,0.25%胰酶消化,镜下观察控制,约5-10分钟(室温太低时应放置到孵箱中),加入全培养基终止消化,瓶体朝上,吸管轻轻吹打4-8分钟,尤其是标记部位。不要用力吹打,以免把贴壁较牢的成纤维细胞,上皮样细胞吹打下来

(4)传代到新瓶中,加入少量培养基,孵箱静置20-30分钟后,MSC大多牢固贴壁。瓶底朝上,轻轻吹打,丢弃悬浮以及贴壁不牢的细胞(大多是上皮样细胞),加入全培养基开始传代培养,如观察仍有较多杂细胞,可重复上述步骤。

(5)经上述处理后,原代的那瓶细胞仍有一些MSC生长,可继续按原代培养,如观察到MSC的克隆,仍可按上述步骤纯化处理。

(6)原代或传代的细胞如观察的少量成片的杂细胞,可直接镜下瓶底标记后,超净台里用长吸管尖端机械刮除,吸出去掉。

菊花与刀用的是全骨髓培养法,直接用含10%的FBS培养基冲洗大鼠的股骨和胫骨,为了避免冲起许多气泡应缓慢冲,冲的次数不应太多。冲洗后不用离心直接接种在培养瓶里,48h~72h后首次换液,一般7~10天可传代。

天之饺子介绍的小鼠MSC的分离方法:取6w小鼠的股骨和胫骨,直接用含培养基冲出骨髓,一定要尽量把干垢端的骨髓冲干净。冲洗后不离心直接接种在培养瓶里,24-48h后去悬浮,再接下来的每3-4天换液一次,直到需要传代。

2.  密度梯度离心法

裴雪涛等用比重为1.073g/ml的percoll分离(400g×20min)人骨髓MSCs,取界面处细胞层,离心后洗涤以2×105/cm2的密度接种,72h后更换培养液,弃掉未贴壁细胞,以后每3d换液一次。细胞长到80%汇合时1:1传代。

菊花与刀利用PERCOLL密度1.073分离大鼠MSC 时,用2400rpm×20mins后可见中间有一层约1~2mm厚的白色层,仔细用吸管吸取这一层再用PBS离心2遍即可加培养基和胎牛血清培养即rMSCs,。

周进明等利用密度为1.082的percoll分离小鼠MSCs,500g×30min离心后,取中间的单个核细胞层,PBS洗两次,接种于IMDM培养基,1d后换液,去掉非贴壁细胞,以后每3-4天换液。

jetter用过FICOLL,FERCOLL,上海二分厂的淋巴细胞分离液分离MSC细胞效果都不错,当然所获细胞群的纯度不一,Percoll最纯,而上海二分厂的淋巴细胞分离液所获细胞群的传代能力优秀(35 PASSAGE)。

本版的部分园友认为MSC贴壁培养得到的细胞不均一,但是多能分化能力和增殖力好,percoll分离得到的细胞较为均一,多能分化性和增殖力不如贴壁培养的,尤其是增殖力相差很远,有人添加bFGF或/和表皮生长因子发现可以增强增殖能力。

二、 骨髓间充质干细胞的培养

天之饺子认为,间质干细胞的培养一定要用塑料培养瓶,不能用玻璃的。因为象间质干这类的基质细胞不易贴玻璃,而且现在买的进口好品牌的培养瓶都涂有一层促细胞贴壁的物质,多数园友培养时都添加10-15%胎牛血清。

分离培养结果的差异可能是由于各个研究小组标本来源、采用的分离方法不同从而所获得的细胞不同,或者用来检测的细胞代数不同,或者培养过程中用的胎牛血清不同,导致MSCs获得或失去这些表面标记物的表达。

三、 骨髓间充质干细胞的特性

体外培养的MSC体积小,成梭形,核浆比大。不表达分化相关的细胞标志,如I、II、III型胶原、碱性磷酸酶或Osteopontin;也不表达SH2、SH3、CD29、CD44、CD71、CD90、CD106、CD120a、CD124、CD166和多种表面蛋白,这群细胞特性稳定,扩增一代和两代后的细胞同质性分别达到95%和98%。MSC联系传代培养和冷冻保存后仍能具有多向分化潜能,而且保持正常的核型核端粒酶活性,但不易自发分化,在体外特定的诱导条件下,MSC可以分化为骨、软骨、脂肪、肌腱、肌肉、神经等多种细胞。

四、其他相关内容

Jiang将从成人以及成年大鼠和小鼠骨髓分离的间充质干细胞(CD45-TER119-)命名为多潜能成年祖细胞,他们证明,MAPC高表达端粒酶,而且随着细胞的扩增,端粒的长度不变,单个MAPC来源的细胞群不仅能在体外向3个胚层的细胞分化,而且能在体内能够向各种组织细胞分化,相比较而言,形态与MSC相似的体外培养的皮肤成纤维细胞则不具有类似的分化潜能。

参考文献

生理学报2003.55(2):153-159

人骨髓间充质干细胞在成年大鼠脑内的迁移及分化

中华放射医学与防护杂志.2002,22(3).-167-169

培养小鼠骨髓间充质干细胞及其移植后在体内的定位分布

Exp Biol Med Vol. 226(6):507-520, 2001

Mesenchymal Stem Cells

NATURE |VOL 418 | 4 JULY 2002

Pluripotency of mesenchymal stem cells derived from adult marrow

编辑: gaowei2010

以下网友留言只代表网友个人观点,不代表网站观点

昵称:      请登录注册后,发表留言

验证码: 
 
 

点击数:0

使用STEM程序分析基因表达的时间趋势并划分聚类群

使用STEM程序分析基因表达的时间趋势并划分聚类群

编者荐语:

最近可能会用到,学习一下

以下文章来源于小白鱼的生统笔记
,作者生信小白鱼 鲤小白

使用STEM程序分析基因表达的时间趋势并划分聚类群

前两篇分别介绍了使用Mfuzz包TCseq包在具有时间序列特点的转录组、蛋白质组数据中分析基因或蛋白表达的时间趋势,并将具有相似表达模式的基因或蛋白划分聚类。这两种方法都是R语言程序包。但如果您不习惯用R,但仍期望实现类似的功能(时间趋势分析、聚类以及可视化作图等),本篇再继续介绍一个图形界面程序,短时间序列表达挖掘器(Short Time-series Expression Miner,STEM),它在很多文献中也常见到。

STEM是一个Java程序,可用于聚类、比较和可视化来自短时间序列(一般在8个时间点以内)的基因表达数据,识别重要的时间表达谱以及与这些谱相关的基因。同时,STEM还可以对具有相同时间表达模式的基因集执行功能富集分析,例如Gene Ontology(GO)富集。事实上,只要是带有“梯度”的数据,理论上都可以使用STEM进行分析,而非仅局限于时间序列,如剂量响应试验等,按“梯度”顺序排列好样本后也可以作为STEM的输入。

接下来简单展示STEM的使用。

安装STEM程序

STEM官网:http://www.cs.cmu.edu/~jernst/stem/

运行STEM需要Java环境支持,需要首先确保您电脑中已经安装了Java。如果尚未安装,可在STEM官网的主界面点击对应的链接下载安装Java。

之后,在STEM官网中点击对应的链接下载STEM程序包。下载下来是一个压缩包形式,解压后点击其中的“stem.jar”即可执行STEM主程序。

使用STEM分析基因表达的时间趋势并划分聚类群的简单演示

1、数据准备

首先您需要准备带有“梯度”的数据,这里以一个基因表达值的时序数据为例,第一列是基因名称,随后几列是各基因在各时间样本中的表达值信息,时间样本按时间顺序依次排列。

2、数据加载和STEM参数设置

在STEM主界面中加载数据,设置合适的参数后,运行分析。

界面的第一部分“1. Expression Data info”中,点击“Browse”加载数据。点击“View Data File”可查看已加载的数据,如果您有生物学重复,可再通过“Repeat Data”指定加载。随后,可选指定一种数据标准化方式。

界面的第二部分“2. Gene info”用于指定加载基因注释信息文件,以便在后续获得聚类后,对目标聚类群内的基因集执行富集分析,如GO、KEGG功能分析等。这里先忽略此功能,我们先将此处留空,下文会再提到这一点。

界面的第三部分“3. Option”用于设置聚类选项,如聚类方法选择(STEM聚类、或者K-means聚类)以及聚类参数等(具体细节随方法而不同)。在“Advanced Options”中可修改更多高级参数,如过滤基因选项、与评估聚类重要性有关的选项、与基因注释有关的选项等。

设置完毕后,点击第四部分的“Execute”执行分析。

3、时间趋势分析和聚类结果

STEM自动弹出分析结果,显示了基因表达的时间动力学聚类的概况。每个折线图代表一个聚类群,相似时间动力学模式的基因被划分到同一聚类群中,折线图趋势代表了该聚类群中基因随时间表达的整体走向。对于具有统计意义(显著时间特征)的聚类群,以彩色背景突出。每个折线图左上方数字是该聚类群的名称,点击特定的折线图将显示该聚类群的统计显著性p值、所包含基因的数量以及每个基因随时间表达的趋势折线图。

在界面中点击“Main Gene Table”,即可将所有基因划分的聚类群名称连同它们的表达值信息一并输出。

若期望同时对各聚类群的基因执行功能富集分析

如果您恰好分析的是基因表达谱数据,STEM也基于超几何分布的原理提供了对目标基因集执行富集分析的方法,但是基因功能注释(如GO、KEGG等)信息需要手动添加。

1、数据准备

除了准备基因表达值矩阵外,还需要提供基因的功能注释分类信息,例如这里添加了基因的GO功能注释表。基因注释表无需表头,共两列,第一列是基因名称,第二列是基因功能注释。基因注释表原则上应包含背景基因在内。

2、数据加载和STEM参数设置

程序界面中,“1. Expression Data info”和“3. Option”的数据加载、标准化以及聚类参数选择等,和上述操作过程一致,不再多说。

但此时需要在“2. Gene info”中指定加载基因注释信息文件,以便在后续获得聚类后,对目标聚类群内的基因集执行富集分析。

设置完毕后,点击“Execute”执行分析。

3、时间趋势分析和聚类结果

类似地,对于聚类结果的描述可参考上文。

不过此时,将在各聚类群中增添了基因的功能富集分析结果,此处是以GO富集为例的展示。在结果界面点击“Profile GO table”即可查看GO富集分析的统计详情,以及输出至本地。

其它功能

以上仅对STEM执行时序数据的聚类以及基因功能富集分析的方法做了简单演示。更多的功能由于使用不多,这里不再提及。例如在上文STEM的主程序界面中,在“2. Gene info”中也提供了基因位置信息的录入窗口,可据此绘制目标基因在染色体中的分布图(如下样式,来自STEM操作手册的示例图)。如果您对更多功能感兴趣,可自行学习STEM操作手册(http://www.cs.cmu.edu/~jernst/stem/STEMmanual.pdf)。

友情链接

点击数:0

MeSH加Cytoscape你也可以绘制超高颜值富集图

MeSH加Cytoscape你也可以绘制超高颜值富集图

原创

生信技能树



生信技能树


3月19日

收录于话题
#​cytoscape的十大插件

12个

最近实验室同学在组会上分享了一篇很有意思的文章,是于  January 2021,  发表在CELL杂志的文章《Spliceosome-targeted therapies trigger an antiviral immune response in triple-negative breast cancer》,链接是:https://doi.org/10.1016/j.cell.2020.12.031

里面的GO/KEGG等生物学数据库富集注释被替换成为了 MeSH terms 的富集,而且结果还很酷炫,如下所示:

酷炫的富集分析

我看了看,文章里面的关于这个图的图例写的是:B) MeSH term enrichment analysis of top 50 resistance candidates. Enriched MeSH terms (FDR <0.1) grouped by related function. Node size represents number of shRNAs that significantly conferred resistance (R4 significant shRNAs highlighted in yellow).

也就是说,每一个基因都有一个值,就是它被多少个shRNAs所靶向,这个文章使用的是forward genetic screen with a short hairpin RNA (shRNA) library (18,370 shRNAs targeting 1,837 genes) ,它根据基因的shRNAs靶向情况把基因排序后,选取top50个基因,进行功能注释。

50个基因在附件

如下所示:

50个基因在附件

那么MeSH是何方神圣呢,我在公众号《 Y叔叔  YuLabSMU  2018-11-01》看到了这个:文章发表:Using meshes for MeSH term enrichment and semantic analyses,提示我们MeSH是个体量比GO还大的生物医学注释库,嘱咐总盯着GO看,有好多很好的注释库,都没什么人在用,比如MeSH就可以给大家提供不同的角度,挖掘不同的信息,不防试试。

步骤如下:

  • Analysis of over-represented Medical Subject Headings (MeSH) was performed using the R package ‘‘meshes’’ (v1.8.0) (Yu, 2018) with the following parameters: MeSHDb = ‘MeSH.Hsa.eg.db’, database = ‘gene2pubmed’ and category = ‘C’.
  • For Cytoscape visualization, individual genes in MeSH term categories were set as nodes and common MeSH terms as edges.

也就是说,首先你得下载和安装meshes这个包,然后使用里面的函数进行MeSH terms 的富集。

作者的MeSH富集结果也在附件

Table S2. Resistance Candidate MeSH Enrichment, Related to Figure 2

MeSH富集结果也在附件

我这里就不给出来代码了,作为一个学徒作业,反正这50个基因大家可以去文章附件复制粘贴拿到,然后R包meshes呢自己摸索一下,做一个富集。我还没有来得及看这个包,不过我猜想应该是跟Y叔的其它包其它函数用法类似,大家都是成熟的生信工程师了,该学会自己看文档了!加油!

如果是普通的富集分析

就可以使用下面的代码,当然了,也是有不同的数据库可以选择:

# 自己想办法读取 文章附件的50个基因,并且针对symbol转为ENTREZID
library(ggplot2)
library(clusterProfiler)
library(org.Hs.eg.db)
# top50基因
df <- bitr(unique(top50), fromType = "SYMBOL",
           toType = c( "ENTREZID" ,'GENENAME'),
           OrgDb = org.Hs.eg.db)
head(df)  
# 存储为 df 这个对象 
gene_up=df$ENTREZID
enrichKK <- enrichKEGG(gene         =  gene_up,
                       organism     = 'hsa',
                       #universe     = gene_all,
                       pvalueCutoff = 0.1,
                       qvalueCutoff =0.1)
head(enrichKK)[,1:6] 
dotplot(enrichKK)
enrichKK=DOSE::setReadable(enrichKK, OrgDb='org.Hs.eg.db',keyType='ENTREZID')
enrichKK 

比如文章的下图,就选择了 Reactome  这个数据库:

Reactome数据库注释结果

(A) Immune signaling pathway components are enriched among genes that confer resistance to spliceosome inhibition. StringDB functional enrichment analysis was performed on the top 50 SD6 resistance candidates identified by the shRNA screen. Functionally enriched Reactome Pathways with FDR < 0.001 are shown.

但是图例里面又出来了 StringDB  这个新花样!

还有一个Cytoscape的可视化

其中主要是 Table S2. Resistance Candidate MeSH Enrichment  里面的结果的解析,本身呢,Y叔的包也是提供类似的网路可视化,就是一般人想通过代码来提高颜值确实是困难,那么成熟的工具比如Cytoscape就是一个很好的选择:

至少我一般都是看了看官方文档而已:

#(3)可视化
#条带图
par(mfrow=c(2,1))
barplot(enrichKK,showCategory=20)
#气泡图
dotplot(enrichKK)
#下面的图需要映射颜色,设置和示例数据一样的geneList
# geneList = deg$logFC
# names(geneList)=deg$ENTREZID
# geneList = sort(geneList,decreasing = T)
#(3)展示top5通路的共同基因,要放大看。
#Gene-Concept Network  
cnetplot(enrichKK)

做出来的图一般来说颜值都不咋地,不过仍然是强推Y叔clusterProfiler的一些可视化方法,函数列表:

  • barplot
  • cnetplot
  • dotplot
  • emapplot
  • gseaplot
  • goplot
  • upsetplot

好几个都是以前没有介绍过的,有趣的是我准备浏览这些可视化函数的帮助文档的时候,看到了这样的话:

重点来了,Y叔特意为其包写了一本书来介绍其用法。Please go to https://yulab-smu.github.io/clusterProfiler-book/ for the full vignette.

点击数:0

MeSH加Cytoscape你也可以绘制超高颜值富集图

MeSH加Cytoscape你也可以绘制超高颜值富集图

原创

生信技能树



生信技能树


3月19日

收录于话题
#​cytoscape的十大插件

12个

最近实验室同学在组会上分享了一篇很有意思的文章,是于  January 2021,  发表在CELL杂志的文章《Spliceosome-targeted therapies trigger an antiviral immune response in triple-negative breast cancer》,链接是:https://doi.org/10.1016/j.cell.2020.12.031

里面的GO/KEGG等生物学数据库富集注释被替换成为了 MeSH terms 的富集,而且结果还很酷炫,如下所示:

酷炫的富集分析

我看了看,文章里面的关于这个图的图例写的是:B) MeSH term enrichment analysis of top 50 resistance candidates. Enriched MeSH terms (FDR <0.1) grouped by related function. Node size represents number of shRNAs that significantly conferred resistance (R4 significant shRNAs highlighted in yellow).

也就是说,每一个基因都有一个值,就是它被多少个shRNAs所靶向,这个文章使用的是forward genetic screen with a short hairpin RNA (shRNA) library (18,370 shRNAs targeting 1,837 genes) ,它根据基因的shRNAs靶向情况把基因排序后,选取top50个基因,进行功能注释。

50个基因在附件

如下所示:

50个基因在附件

那么MeSH是何方神圣呢,我在公众号《 Y叔叔  YuLabSMU  2018-11-01》看到了这个:文章发表:Using meshes for MeSH term enrichment and semantic analyses,提示我们MeSH是个体量比GO还大的生物医学注释库,嘱咐总盯着GO看,有好多很好的注释库,都没什么人在用,比如MeSH就可以给大家提供不同的角度,挖掘不同的信息,不防试试。

步骤如下:

  • Analysis of over-represented Medical Subject Headings (MeSH) was performed using the R package ‘‘meshes’’ (v1.8.0) (Yu, 2018) with the following parameters: MeSHDb = ‘MeSH.Hsa.eg.db’, database = ‘gene2pubmed’ and category = ‘C’.
  • For Cytoscape visualization, individual genes in MeSH term categories were set as nodes and common MeSH terms as edges.

也就是说,首先你得下载和安装meshes这个包,然后使用里面的函数进行MeSH terms 的富集。

作者的MeSH富集结果也在附件

Table S2. Resistance Candidate MeSH Enrichment, Related to Figure 2

MeSH富集结果也在附件

我这里就不给出来代码了,作为一个学徒作业,反正这50个基因大家可以去文章附件复制粘贴拿到,然后R包meshes呢自己摸索一下,做一个富集。我还没有来得及看这个包,不过我猜想应该是跟Y叔的其它包其它函数用法类似,大家都是成熟的生信工程师了,该学会自己看文档了!加油!

如果是普通的富集分析

就可以使用下面的代码,当然了,也是有不同的数据库可以选择:

# 自己想办法读取 文章附件的50个基因,并且针对symbol转为ENTREZID
library(ggplot2)
library(clusterProfiler)
library(org.Hs.eg.db)
# top50基因
df <- bitr(unique(top50), fromType = "SYMBOL",
           toType = c( "ENTREZID" ,'GENENAME'),
           OrgDb = org.Hs.eg.db)
head(df)  
# 存储为 df 这个对象 
gene_up=df$ENTREZID
enrichKK <- enrichKEGG(gene         =  gene_up,
                       organism     = 'hsa',
                       #universe     = gene_all,
                       pvalueCutoff = 0.1,
                       qvalueCutoff =0.1)
head(enrichKK)[,1:6] 
dotplot(enrichKK)
enrichKK=DOSE::setReadable(enrichKK, OrgDb='org.Hs.eg.db',keyType='ENTREZID')
enrichKK 

比如文章的下图,就选择了 Reactome  这个数据库:

Reactome数据库注释结果

(A) Immune signaling pathway components are enriched among genes that confer resistance to spliceosome inhibition. StringDB functional enrichment analysis was performed on the top 50 SD6 resistance candidates identified by the shRNA screen. Functionally enriched Reactome Pathways with FDR < 0.001 are shown.

但是图例里面又出来了 StringDB  这个新花样!

还有一个Cytoscape的可视化

其中主要是 Table S2. Resistance Candidate MeSH Enrichment  里面的结果的解析,本身呢,Y叔的包也是提供类似的网路可视化,就是一般人想通过代码来提高颜值确实是困难,那么成熟的工具比如Cytoscape就是一个很好的选择:

至少我一般都是看了看官方文档而已:

#(3)可视化
#条带图
par(mfrow=c(2,1))
barplot(enrichKK,showCategory=20)
#气泡图
dotplot(enrichKK)
#下面的图需要映射颜色,设置和示例数据一样的geneList
# geneList = deg$logFC
# names(geneList)=deg$ENTREZID
# geneList = sort(geneList,decreasing = T)
#(3)展示top5通路的共同基因,要放大看。
#Gene-Concept Network  
cnetplot(enrichKK)

做出来的图一般来说颜值都不咋地,不过仍然是强推Y叔clusterProfiler的一些可视化方法,函数列表:

  • barplot
  • cnetplot
  • dotplot
  • emapplot
  • gseaplot
  • goplot
  • upsetplot

好几个都是以前没有介绍过的,有趣的是我准备浏览这些可视化函数的帮助文档的时候,看到了这样的话:

重点来了,Y叔特意为其包写了一本书来介绍其用法。Please go to https://yulab-smu.github.io/clusterProfiler-book/ for the full vignette.

点击数:0

美学贴面视频一例。备牙还是不备牙???-徐永钰的博客-KQ88口腔博客

美学贴面视频一例。备牙还是不备牙???

2018-11-04 15:40 阅读:2000

案例简述

     本病例的 12    13   22   23  是腭倾位的牙 ,11   21  稍稍有点前突,咬合是重度深覆盖,所以不需要考虑咬合的问题。固备牙量不用太多,正好通过贴面的厚度来补偿了 11 12   21   22之间的突度落差。患者反而觉得牙齿唇侧维度变圆润了,牙齿看上去更齐了。

     不备牙贴面适应症毕竟是少的,可以少备,但是一点不备肯定不现实,备成自切端依次向颈部逐渐变薄的样子颈部微微有大约0.2左右的肩台,就目前的材料而言其实颈部是可以最薄做到0.2毫米的。然后粘接后通过抛光这个厚度就能实现无限薄。这也是好多病例可以做的非常小,非常薄的原因。

   我们每天都在快乐的进步着,希望本视频可以带给大家一定的思路,有不足之处还望不吝赐教,谢谢

已有0人推荐

喜欢这篇文章的话,就点一下给博主推荐一下吧!

登 录

登录后才可发表评论»

最新评论

还没有评论,快来第一个评论吧!

点击数:0

单个基因多个基因的可视化

这是ggplot2可视化专题的第二个实例操作

【ggplot2的基本思路见前文总论】:基于ggplot2的RNA-seq转录组可视化:总述和分文目录

【ggplot2绘图具体策略第一篇】:测序结果概览:基因表达量rank瀑布图,高密度表达相关性散点图,注释特定基因及errorbar的表达相关性散点图绘制

【ggplot2绘图具体策略第三篇】:配对样本基因表达趋势:优化前后的散点连线图+拼图绘制

在我们获得转录组的测序结果并进行数据处理-差异分析一整套流程后,我们不仅关注整个转录组的表达趋势,还包括了特定基因在不同处理组/特征间的表达情况。这时依旧是各类ggplot2统计图的主场。

本文将要介绍的图表类型展示如下:包括分组小提琴图(B)、分组(A)/分面柱状图(C)、单基因蜂群点图拼图(D)。想必大家都知道这些图表在生物医学文献中半壁江山的地位。用R-ggplot2来绘制它们,简单明了美观,也不需要对数据进行跨平台保存读取,可谓方便。

the panels that we are going to draw in this figure

我们依旧使用通过第一、二篇介绍的整合好并差异分析过的TCGA白种人LUSC肺鳞癌mRNA-seq转录组表达数据。

数据获取

基于第一篇文章从TCGA数据库下载并整合清洗高通量肿瘤表达谱-临床性状数据,我们下载并清洗TCGA数据库中white人种的LUSC肺鳞癌mRNA-seq转录组counts数据和FPKM数据。

随后根据第二篇文章TCGA数据整合后进行DESeq2差异表达分析和基于R的多种可视化对counts数据进行了基于DESeq2的差异分析。

现在假设我们已经获得:
(样本1到344为cancer,345到386为normal)
(1)resSigAll: the subset object generated by DESeq2 containing info about all differentially expressed genes.
(2)clinical_trait: the data frame containing submitter_id and tumor_stage of selected TCGA LUSC samples. It will be used for grouping.
(3)condition_table: the data frame defining the sample_type and recording the TCGA_IDs and submitter_id of each TCGA sample. It will be used for grouping.
(4)expr_vst: vst transformed normalized counts matrix of genes and samples generated by DESeq2. It is the raw material of downstream visualization.

需要R包

ggplot2 (作图),reshape2包 (对数据框格式进行转制),ggsignif (统计学注释包),ggbeeswarm (蜂群图作图包),customLayout,和gridExtra(用于ggplot2对象拼图)。

install.packages('ggplot2')
install.packages('reshape2')
install.packages('ggsignif')
install.packages('ggbeeswarm')
install.packages('customLayout')
install.packages('gridExtra')
library('ggplot2')
library('reshape2')
library('ggsignif')
library('ggbeeswarm')
library('customLayout')
library('gridExtra')

1. 分组柱状图

假设现在我们关注一个目的基因在normal和cancer组间的表达分布,且希望看到每组内不同LUSC tumor stages间该基因的表达变化情况。(因为normal组也是来自于患者的癌旁组织,所以也可以分组)

则绘图需要:
(1)normal/cancer分组以及组内tumor stage亚组(x轴分组依据)
(2)亚组的vst counts均值(y轴,因为作柱状图,不需要每个散点的信息)
(3)亚组的vst counts标准差(errorbar)

我们随机从差异基因中选取一个基因作为可视化对象。自定义函数,输入stage i/stageii/>= stage iii可通过clinical_trait和condition_table dataframe分别匹配相应的normal和cancer样本,并分别计算均值和标准差。最后汇总得到

set.seed(10)
gene_chosen <- sample(resSigAll@rownames,1)
gene_counts_all <- expr_vst[gene_chosen,]
mean_sd_by_clinical <- function(input_stage){
  if(input_stage == '>= stage iii'){
    samples_indices <- clinical_trait$submitter_id[grep(clinical_trait$tumor_stage, pattern = 'stage iii[ab]?|stage iv')]
  } else {
    samples_indices <- clinical_trait$submitter_id[grep(clinical_trait$tumor_stage, pattern = paste0(input_stage, '[ab]?$'))]
  }
  normal_samples <- condition_table[condition_table$submitter_id %in% samples_indices & condition_table$sample_type == 'normal','TCGA_IDs']
  cancer_samples <- condition_table[condition_table$submitter_id %in% samples_indices & condition_table$sample_type == 'cancer','TCGA_IDs']
  data.frame('sample_type'=c('normal','cancer'), 'stages'=c(rep(input_stage,2)),
             'means'=c(mean(gene_counts_all[normal_samples]), mean(gene_counts_all[cancer_samples])),
             'sds'=c(sd(gene_counts_all[normal_samples]), sd(gene_counts_all[cancer_samples])))
}
mean_sd_table_by_clinical <- do.call(rbind, lapply(c('stage i', 'stage ii', '>= stage iii'), mean_sd_by_clinical))
mean_sd_table_by_clinical$sample_type <- factor(mean_sd_table_by_clinical$sample_type, 
                                                levels = c('normal','cancer'), ordered = T)

整理得到的数据框如下:

the integrated data for visualization

然后进行统计显著性框的标注。这里打算用geom_segment进行线条绘制,所以每个统一方向的线条都需要注明x/y轴的起点和终点坐标。

注:这里s指start,e指end,l指left,r指right,h指horizontal,u指upper,uh指upper horizontal。为了画出显著性注释框,这里将左竖线、右竖线、封顶横线、组间竖线分别用同一函数绘制,最后组间封顶横线用一函数绘制。

the guide for how we draw the annotation
annotation_table <- data.frame('xsl'=c(0.7, 1.7), 'xel'=c(0.7, 1.7), 'ysl'=c(7.7, 8.7), 'yel'=c(8.2, 9.2),
                               'xsr'=c(1.3, 2.3), 'xer'=c(1.3, 2.3), 'ysr'=c(7.7, 8.7), 'yer'=c(8.2, 9.2),
                               'xsh'=c(0.7, 1.7), 'xeh'=c(1.3, 2.3), 'ysh'=c(8.2, 9.2), 'yeh'=c(8.2, 9.2),
                               'xsu'=c(1, 2), 'xeu'=c(1, 2), 'ysu'=c(8.2, 9.2), 'yeu'=c(9.7, 9.7))
annotation_table2 <- data.frame('xsuh'=1 ,'xeuh'=2, 'ysuh'=9.7, 'yeuh'=9.7)

接下来就是ggplot2绘图:

◈ 将整理的mean_sd_table_by_clinical传入ggplot函数,以主要分组依据normal/cancer为x轴,y为counts均数,【fill填色依据为组内亚组tumor_stage】。

◈ geom_col函数绘制柱状图,组内亚组的柱间间距为0.7 (position),柱宽为0.5 (width),柱的边框为黑色 (color) 【fill是填充颜色,color是点/线颜色】,边框为实线 (linetype = 1)。

◈ 手动设置亚组的填充颜色。

◈ 设置误差棒的位置 (x继承ggplot分组位置,需补充指定ymax, ymin),顶端横线宽度 (width),和亚组的位置 (position: 注意与主绘图函数的间隔保持一致即可)。

◈ 不继承主参数,进行注释框的绘制 (geom_segment()),以及进行单独一行FDR值的注释 (annotate())。

◈ 设定y轴显示范围、坐标轴小标题和主题。

stage_expr <- ggplot(mean_sd_table_by_clinical, aes(x=sample_type, y=means, fill=stages))+
  geom_col(position = position_dodge(width = 0.7), width = 0.5, color='black', linetype=1)+
  scale_fill_manual(values = c('stage i'='gray20', 'stage ii'='gray50', '>= stage iii'='gray80'))+
  geom_errorbar(aes(ymin=means-sds, ymax=means+sds), width=0.1, position = position_dodge(width = 0.7), size=0.5)+
  geom_segment(inherit.aes = F, data = annotation_table, aes(x=xsl,xend=xel,y=ysl,yend=yel))+
  geom_segment(inherit.aes = F, data = annotation_table, aes(x=xsr,xend=xer,y=ysr,yend=yer))+
  geom_segment(inherit.aes = F, data = annotation_table, aes(x=xsh,xend=xeh,y=ysh,yend=yeh))+
  geom_segment(inherit.aes = F, data = annotation_table, aes(x=xsu,xend=xeu,y=ysu,yend=yeu))+
  geom_segment(inherit.aes = F, data = annotation_table2, aes(x=xsuh,xend=xeuh,y=ysuh,yend=yeuh))+
  annotate('text', label='FDR<0.001', color='black', x=1.5, y=10.1, fontface='bold', size=3)+
  ylim(0,10.3)+xlab(gene_chosen)+ylab('vst transformed normalized counts')+
  theme_bw()+
  theme(panel.grid = element_line(color = 'white'))
stage_expr

即可得到图片。注明:这里只是教学显著性注释框画法,并未分亚组分别进行假设检验。

the barplot containing sub-groups

2. 分组小提琴图

我们可能同时关注多个基因,想要同时展示它们在组间的表达情况。此时也可以类似地,将多个基因作为主要分组,而将sample_type作为fill填色依据的组内亚组,合并在一个panel进行展示。

则绘图需要:
(1)基因分组和每个基因组内的normal/cancer亚组(x轴分组和fill填色依据)
(2)每个样本相应基因的表达值(这里是vst counts)(y轴)

注:需注意不同绘图类型要求的数据形式。如作柱状图只需要每个亚组的均值,而散点图、小提琴图等需要亚组内所有样本的表达值(要进行密度展示)。又如手动绘制errorbar需提前准备每组的sd值,而绘制箱线图时不需提供分位数,ggplot2会使用输入表达数据自动计算并绘图。

这里在所有差异基因中随机选取4个基因进行展示。首先依附于expr_vst原本的数据形式整理成宽形式表格,即每个基因的表达值占据一列,并另有sample_type列进行normal/cancer分组:

format demonstration of data frame for_multigroup_vis

使用reshape2包的melt函数将数据整理成长形式,此时主分组和亚组信息就可以直接分别从genes和sample_type列传递给ggplot了。

format demonstration of data frame melted_var_table

然后将主分组genes进行factor化排序。

set.seed(29)
for_multigroup_vis <- t(expr_vst[sample(resSigAll@rownames, 4),])
for_multigroup_vis <- data.frame(for_multigroup_vis, 'sample_type'=condition_table$sample_type, stringsAsFactors = F)
melted_var_table <- reshape2::melt(for_multigroup_vis, id.vars='sample_type', 
                                   variable.name='genes', value.name='vst_counts')
#tell ggplot2 the order of graphing within each gene group.
melted_var_table$sample_type <- factor(melted_var_table$sample_type, levels = c('normal','cancer'), ordered = T)

和前面的示例相同,建立坐标表以使用geom_segment函数绘制各组的统计显著性框,并建立坐标和标签表以使用geom_text函数添加各组FDR文字注释。

FDR_text_table <- data.frame('gene'=as.character(unique(melted_var_table$genes)),'start'=c(0.8,1.8,2.8,3.8), 'end'=c(1.19, 2.19,3.19,4.19),
                                'height'=c(22,15,16.5,16), annotations=c('FDR=2.15e-91','FDR=3.40e-59','FDR=1.74e-89','FDR=1.07e-48'))
segment_table <- data.frame('xsl'=c(0.8,1.8,2.8,3.8), 'xel'=c(0.8,1.8,2.8,3.8), 'ysl'=c(17,10,15.3,14.7), 'yel'=c(21,14,15.5,15),
                            'xsr'=c(1.2,2.2,3.2,4.2), 'xer'=c(1.2,2.2,3.2,4.2), 'ysr'=c(20.5,13.8,14,14.5), 'yer'=c(21,14,15.5,15),
                            'xsh'=c(0.8,1.8,2.8,3.8), 'xeh'=c(1.2,2.2,3.2,4.2), 'ysh'=c(21,14,15.5,15), 'yeh'=c(21,14,15.5,15))

ggplot2绘图的思路基本相同,不再详细描述。值得注意的点是:

◈ 此次映射数据时以genes为x轴主分组,sample_type为fill填色亚分组,每个样本的vst_counts映射至y轴。

◈ 使用geom_violin()绘制小提琴图,position参数设置主组内亚组间距离,使用scale设置组间面积恒定 ‘area’。(或设置为width/count,分别表示每组有相同的最大小提琴宽度和宽度与观察值数成比例)

#draw the plot.
multiple_vio <- ggplot(melted_var_table, aes(x=genes, y=vst_counts, fill=sample_type))+
  geom_violin(position = position_dodge(width=0.8), scale = 'area')+
  geom_boxplot(position = position_dodge(width = 0.8), 
               outlier.size = 0, width = 0.1, show.legend = FALSE)+
  scale_fill_manual(values = c('cancer'='orange','normal'='blue'))+
  geom_text(inherit.aes = F,data = FDR_text_table, aes(x=gene, y=height, label=annotations), size=2.5, fontface='bold')+
  geom_segment(inherit.aes = F,data=segment_table,aes(x=xsl,xend=xel,y=ysl,yend=yel))+
  geom_segment(inherit.aes = F,data=segment_table,aes(x=xsr,xend=xer,y=ysr,yend=yer))+
  geom_segment(inherit.aes = F,data=segment_table,aes(x=xsh,xend=xeh,y=ysh,yend=yeh))+
  theme_bw()+theme(panel.grid = element_line(colour = 'white'), plot.title = element_text(hjust = 0.5))+
  ylab('normalized_counts')+xlab('genes')+ylim(3,24)+
  ggtitle('violin plot of multiple genes')
multiple_vio

获得图形为:

the violin plot containing multiple groups and sub-groups

3. 分面柱状图

上述两个图片的策略均是二次分组,x映射主分组,fill映射亚组。另一种策略是使用ggplot2的facet.grid()函数进行分面展示,即每个主分组获得一个panel分别可视化。

则绘图需要:
(1)同时含有基因和normal/cancer信息的独立分组(x轴分组依据)
(2)每个组隶属的基因信息(x轴分面)
(3)每个组隶属的样本类型(fill填充依据)
(4)每个组的表达值均数(y轴)
(5)每个组的表达值标准差(errorbar)

整理数据,沿用之前随机选取的4个基因并整理成长格式的表达data frame。自建函数,向量化批量计算每个基因-每种样本类型独立组的表达平均值和标准差。以”gene_sample_type“的格式标记为8个独立组,并添加annotation列便于geom_text的注释。最后将独立分组因子化用于手动排序,人工将同一个基因的normal/cancer组相邻放置。

#draw the graphs by facet.
melted_var_table2 <- melted_var_table
#calculate the mean and sd of each group.
mean_sd <- lapply(as.character(unique(melted_var_table2$genes)), function(x){
  mean_normal <- mean(melted_var_table2$vst_counts[melted_var_table2$genes == x & melted_var_table2$sample_type == 'normal'])
  mean_cancer <- mean(melted_var_table2$vst_counts[melted_var_table2$genes == x & melted_var_table2$sample_type == 'cancer'])
  sd_normal <- sd(melted_var_table2$vst_counts[melted_var_table2$genes == x & melted_var_table2$sample_type == 'normal'])
  sd_cancer <- sd(melted_var_table2$vst_counts[melted_var_table2$genes == x & melted_var_table2$sample_type == 'cancer'])
  data.frame('gene'= c(x,x), 'sample_type'=c('normal','cancer'),
             'mean'=c(mean_normal, mean_cancer), 'sd'=c(sd_normal, sd_cancer))})
mean_sd <- do.call(rbind, mean_sd)
mean_sd_annotation <- data.frame(mean_sd, 'groups'=paste(mean_sd$gene, mean_sd$sample_type, sep = '_'),
                                 'annotation'= rep(c('','****')), stringsAsFactors = F)
mean_sd_annotation$groups <- factor(mean_sd_annotation$groups, levels = unique(mean_sd_annotation$groups),
                                   ordered = T)

整理好的数据框为如下,含gene分类,sample_type分类,将两列字符串粘贴在一起而形成的独立组信息,每组的mean/sd值,以及每个组对应的annotation信息:

format demonstration of the data frame mean_sd_annotation

ggplot2绘图:值得注意的点是:

◈ ggplot函数x轴映射groups,即各个独立组。fill以sample_type分别配色。

◈ geom_text补充文字的y轴位置,即y=mean+sd+0.5。

◈ 使用facet_grid()函数,以输入数据框的gene列按行分面 (~gene),每个分面只保留有数据的x轴部分 (scale=’free’)。

p <- ggplot(mean_sd_annotation, aes(x=groups, y=mean, fill=sample_type))+
  geom_col(width=0.4, linetype=1, color='black')+
  geom_errorbar(aes(ymin=mean-sd, ymax=mean+sd), width=0.1)+
  geom_text(aes(y=mean+sd+0.5,label=annotation), size = 3, fontface='bold')+
  scale_fill_manual(values=c('normal'='blue', 'cancer'='orange'))+
  facet_grid(~gene, scales='free')+
  scale_x_discrete(label=c('normal','cancer'))+
  ylab('vst-normalized counts')+xlab('groups')+
  theme_bw()+theme(panel.grid = element_line(colour = 'white'), legend.position = 'none')
p

获得图形如下:

每个框都属于一个facet的分面柱状图

注:使用facet.grid函数时需要注意各个函数间需要有统一的映射数据。比如:本例如果使用geom_violin(),则需输入所有样本的表达值而不是均值,这会使得文字注释的变量长度与输入数据框长度不一而无法合并到一个数据框中共同传入ggplot()。若geom_text不继承全局参数,会导致facet.grid认为每个分面在x轴的每个分组上均有数据,导致布局混乱。

总之,分facet这个方法是比较局限的。

4. 拼接多个单基因蜂群图

如果我想使用更多样性的可视化方法呢?比如在样本例数较多时使用蜂群图而不是较为死板的柱状图?

an example of beeswarm plot downloaded from an article of Plos One

R中有beeswarm包,加载后使用geom_beeswarm()函数可实现本功能。但由于未知的原因,它和geom_jitter()都不能像geom_violin()一样进行二次分组,如果采取第二种作图策略直接设置ggplot(data, aes(x=gene, y=vst_counts, color=sample_type)),他们仅表现为geom_point即可完成的单纯散点图。这不是我们想要的效果。如下图:

an erroneous example

所以这里我使用产生多个单基因一次分组的蜂群散点图,并用拼图包将所有单图拼接。

绘图需要:
(1)各基因的sample_type (x轴);
(2)各组内样本的表达值 (这里是vst-counts) (y轴);
(3)各组的平均值和标准差 (自制mean±sd errorbar)。

首先整理数据框,获得各样本的gene,sample_type,vst_counts数据框,各组的均值、标准差数据框,和各基因组间显著性标记数据框。

#draw the bee plot of the same data by another manner (by joining graphs together).
melted_var_table3 <- melted_var_table
#we should manually tell the ggplot2 how we oder the x axis by transforming groups into factors.
melted_var_table3$sample_type <- factor(melted_var_table3$sample_type, 
                                        levels = c('normal','cancer'), ordered = T)
#calculate the mean and sd of each group.
mean_sd <- lapply(as.character(unique(melted_var_table3$genes)), function(x){
  mean_normal <- mean(melted_var_table3$vst_counts[melted_var_table3$genes == x & melted_var_table3$sample_type == 'normal'])
  mean_cancer <- mean(melted_var_table3$vst_counts[melted_var_table3$genes == x & melted_var_table3$sample_type == 'cancer'])
  sd_normal <- sd(melted_var_table3$vst_counts[melted_var_table3$genes == x & melted_var_table3$sample_type == 'normal'])
  sd_cancer <- sd(melted_var_table3$vst_counts[melted_var_table3$genes == x & melted_var_table3$sample_type == 'cancer'])
  data.frame('gene'= c(x,x), 'sample_type'=c('normal','cancer'),
             'mean'=c(mean_normal, mean_cancer), 'sd'=c(sd_normal, sd_cancer))})
mean_sd <- do.call(rbind, mean_sd)
#we have gotten the FDRs from the object of DE analysis before.
annotation_FDR <- data.frame('gene'=as.character(unique(melted_var_table$genes)),
                             'annotations'=c('FDR=2.15e-91','FDR=3.40e-59','FDR=1.74e-89','FDR=1.07e-48'))

ggplot2作图。由于拼图R包customLayout拼图的输入对象是多个ggplot2绘图对象的list,因此这里创建一个自定义ggplot2绘图function,之后配合lapply函数建立多个单基因蜂群图的list。

几个注意点:
◈ geom_beeswarm()绘制蜂群点图,cex设置点之间的排列距离,priority设置一个组中点的排列方式。

◈ 使用geom_point(),以均值标准差数据框作为输入,标记每个组的平均值,设置shape为3即加号 (+),方便与errorbar融合在一起。

◈ 使用geom_errorbar(),以均值标准差数据框作为输入,绘制sd值errorbar,在图中与均值的+号融合形成三分errorbar形状。

◈ 使用一个新的R包ggsignif进行统计学注释。geom_signif()仍继承全局参数,comparisons输入所有进行比较的组间名称的list (list(c(‘group1’, ‘group2’), c(‘group3’, ‘group4’), …)) ,annotations参数则是按comparisons参数中输入比较组的顺序添加文字注释。本包只能进行一次分组的比较,而不能进行由fill/color划分的亚组间的比较注释。

◈ 为了防止不同基因间y轴区间差异过大,使用ylim()设置每个图的y轴作图区间仅分布在本基因样本最小表达值-1.5,到最大表达值+1.5之间。

multi_bee_plot <- function(gene_for_vis){
  library(ggplot2)
  library(ggbeeswarm)
  library(ggsignif)
  ggplot(melted_var_table3[melted_var_table3$genes == gene_for_vis,], aes(x=sample_type, y=vst_counts, color=sample_type))+
  geom_beeswarm(cex = 1.5, size=0.5, priority = 'ascending')+ #priority=none/random/ascending/descending
  geom_point(inherit.aes = F, data=mean_sd[mean_sd$gene == gene_for_vis,],
             aes(x=sample_type, y=mean), shape=3, color='black', size=5)+
  geom_errorbar(inherit.aes = F, data=mean_sd[mean_sd$gene == gene_for_vis,],
                aes(x=sample_type, ymin=mean-sd, ymax=mean+sd), width=0.5, size=0.5)+
  scale_x_discrete(labels=c('normal','cancer'))+
  scale_color_manual(values=c('normal'='blue','cancer'='orange'))+
  geom_signif(comparisons = list(c('normal','cancer')), annotations = annotation_FDR$annotations[annotation_FDR$gene == gene_for_vis],
              color='black', size = 0.5, textsize=3, fontface='bold')+
  xlab(gene_for_vis)+ylab('vst normalized counts')+
  ylim(min(melted_var_table3[melted_var_table3$genes == gene_for_vis,'vst_counts'])-1.5,
       max(melted_var_table3[melted_var_table3$genes == gene_for_vis,'vst_counts'])+1.5)+
  theme_bw()+
  theme(panel.grid = element_line(color = 'white'), legend.position = 'none')
}

使用拼图R包customLayout进行拼图。

思路是用lay_new函数创建新画布,建立matrix,用其中的行、列、和数字分别代表画布中容纳图片的行、列数和图片排列的顺序。

lay <- lay_new(mat=matrix(1:4, ncol = 4), widths=c(2,2,2,2),heights = 1)
lay_show(lay)

lay_show函数用于展示创建的画布:

the canvas we generated

lapply函数创建绘图对象list,并用lay_grid函数进行拼图输出。

multiple_beeswarm <- lapply(as.character(unique(melted_var_table2$genes)), multi_bee_plot)
lay_grid(grobs = multiple_beeswarm, lay = lay)

获得如下组图:

beeswarm plots collage

一共四种解决方案,希望本文能对大家有所帮助!

喜欢的朋友就学起来,点个赞吧!

点击数:0

KEGG分析工具:pathview基本操作 – 简书

KEGG分析工具:pathview基本操作

32018.07.10 20:48:46字数 1,264阅读 12,857
什么是KEGG

KEGG(Kyoto Encyclopedia of Genes and Genomes)是系统分析基因功能、基因组信息数据库,它有助于研究者把基因及表达信息作为一个整体网络进行研究。KEGG将基因组信息和高一级的功能信息有机地结合起来,通过对细胞内已知生物学过程的计算机化处理和将现有的基因功能解释标准化,对基因的功能进行系统化的分析。KEGG的另一个任务是一个将基因组中的一系列基因用一个细胞内的分子相互作用的网络连接起来的过程,如一个通路或是一个复合物,通过它们来展现更高一级的生物学功能。KEGG主要包含以下数据库:

解释基因与功能之间的关系
为什么要用KEGG的代谢通路

KEGG提供的整合代谢途径(pathway)查询十分出色,包括碳水化合物、核苷、氨基酸等的代谢及有机物的生物降解,不仅提供了所有可能的代谢途径,而且对催化各步反应的酶进行了全面的注解,包含有氨基酸序列、PDB库的链接等等。KEGG是进行生物体内代谢分析、代谢网络研究的强有力工具。与其他数据库相比,KEGG 的一个显著特点就是具有强大的图形功能,它利用图形而不是繁缛的文字来介绍众多的代谢途径以及各途径之间的关系。

  • 从功能出发,研究功能到通路到基因,迅速锁定某些功能的基因;
  • 从基因出发,获得某个基因在信号通路中的角色(上下游关系)和生物学功能;
  • 发现涉及通路的差异变化和功能分布
  • 形象的图形使我们直观地对某一个基因有了一个由点及面的印象。
KEGG代谢通路怎么看

在KEGG中有两种代谢图

  • 参考代谢通路图reference pathway,是根据已有的知识绘制的概括的、详尽的具有一般参考意义的代谢图,这种图上就不会有绿色的小框,而都是无色的,所有的框都可以点击查看更详细的信息;

  • 特定物种的代谢图species-specific pathway,会用绿色来标出这个物种特有的基因或酶,只有这些绿色的框点击以后才会给出更详细的信息。

这两种图很好区分,reference pathway 在KEGG中的名字是以map开头的,比如map00010,就是糖酵解途径的参考图;而特定物种的代谢通路图开头三个字符不是map而是种属英文单词的缩写(应该就是一个属的首字母+2个种的首字母)比如酵母的糖酵解通路图,就是sce00010,大肠杆菌的糖酵解通路图就应该是eco00010吧。

代谢通路中各种符号标识 :

  • K+num:基因ID号,表示在所有同源物种中具有相似结构或功能的一类同源蛋白
  • ko+num: 代谢通路名称,表示一个特定的生物路径
  • M+ num: 模块名称
  • C+ num: 化合物名称
  • E-,-,-,-: 酶名称
  • R + num : 反应名
  • RC+ num : 反映类型
  • RP+num: 反应物对

图例作用关系:

如何绘制代谢通路图

控制通路图将自己的基因绘制在一个通路图中

  • 线分析工具—ipath2.0
  • R包:pathview
    今天简单介绍一下这个包。
#install 
source("http://bioconductor.org/biocLite.R")
options(BioC_mirror="http://mirrors.ustc.edu.cn/bioc/")
biocLite("pathview")
library("pathview")
setwd("C:\Users\Administrator\Desktop\pathview")
rm(list=ls())
#载入数据文件
data(gse16873.d)
data(demo.paths)
cpd.data <- read.csv("sim.cpd.data2.csv",row.names=1)
?pathview
View(gse16873.d)

基因表达变化数据框gse16873.d如下所示,行是基因ID,列是样本ID,变化范围是-1到1.`

代谢通路数据demo.paths结构如下:

基本参数:

#Usage
pathview(gene.data = NULL, cpd.data = NULL, pathway.id,
species = "hsa", kegg.dir = ".", cpd.idtype = "kegg", gene.idtype =
"entrez", gene.annotpkg = NULL, min.nnodes = 3, kegg.native = TRUE,
map.null = TRUE, expand.node = FALSE, split.group = FALSE, map.symbol =
TRUE, map.cpdname = TRUE, node.sum = "sum", discrete=list(gene=FALSE,
cpd=FALSE), limit = list(gene = 1, cpd = 1), bins = list(gene = 10, cpd
= 10), both.dirs = list(gene = T, cpd = T), trans.fun = list(gene =
NULL, cpd = NULL), low = list(gene = "green", cpd = "blue"), mid =
list(gene = "gray", cpd = "gray"), high = list(gene = "red", cpd =
"yellow"), na.col = "transparent", ...)

Note that gene.data and cpd.data can't be NULL simultaneously.

gene.data是需要提供的基因向量,默认是Entrez_ID。其由gene.idtype决定
cpd.data 指的药物分子的名称向量。
Pathway.id指的是在KEGG中的ID。
kegg.native默认是TRUE输出完整pathway的png格式文件,反之输出仅是输入的基因列表的pdf文件。
Map.null默认是TRUE,当使用FALSE时其pdf的文件图像会更漂亮
Split.group 主要是在kegg.native为FALSE的时候会起到一定的作用,主要是将在同一个反应的基因归在一起。
new.signature=FALSE将会将标签去掉,只显示图像

#原始的kegg.native=TRUE时的图像绘制
pv.out <- pathview(gene.data = gse16873.d[, 1], pathway.id =
                     demo.paths$sel.paths[3], species ="hsa", out.suffix = "gse168731", gene.idtype =
                     "entrez", gene.annotpkg = NULL,min.nnodes = 3, kegg.native =TRUE,
                   map.null = FALSE, expand.node =FALSE,split.group =FALSE, map.symbol =
                     TRUE,new.signature=FALSE)

#kegg.native =FALSE:
pv.out <- pathview(gene.data =gse16873.d[, 1], pathway.id =
                     demo.paths$sel.paths[3], species ="hsa", out.suffix = "gse168732", gene.idtype =
                     "entrez", gene.annotpkg = NULL,min.nnodes = 3, kegg.native =FALSE,
                   map.null = FALSE, expand.node =FALSE,split.group =FALSE, map.symbol =
                     TRUE,new.signature=FALSE)
#进一步如果想将所有同一个反应的基因归在一起,那么需要设置参数split.group =TRUE:
pv.out <- pathview(gene.data =gse16873.d[, 1], pathway.id =
                     demo.paths$sel.paths[1], species ="hsa", out.suffix = "gse168733", gene.idtype =
                     "entrez", gene.annotpkg = NULL,min.nnodes = 3, kegg.native =FALSE,
                   map.null = FALSE, expand.node =FALSE,split.group =TRUE, map.symbol =
                     TRUE,new.signature=FALSE)
#KEGG view: both gene and compound data
sim.cpd.data=sim.mol.data(mol.type="cpd", nmol=3000)

pv.out <- pathview(gene.data = gse16873.d[, 1], cpd.data = sim.cpd.data,
                   pathway.id = demo.paths$sel.paths[3], species = "hsa", out.suffix =
                     "gse16874.cpd", keys.align = "y", kegg.native = TRUE, key.pos = demo.paths$kpos1[3])
#multiple states in one graph

pv.out <- pathview(gene.data = gse16873.d[, 1:6], 
                   cpd.data = cpd.data[, 1:6], pathway.id = demo.paths$sel.paths[3], 
                   species = "hsa", out.suffix = "gse16875", keys.align = "y", 
                   kegg.native = TRUE, match.data = FALSE, multi.state = TRUE, same.layer = TRUE)

hsa00640.gse16875.multi.png

pathview在线版
Pathview: An R package for pathway based data integration and visualization
数据分析-【KEGG相关包-clusterProfiler,Pathview的学习】
经典信号通路作图工具包
R语言实现KEGG通路富集可视化
KEGG信号通路的展示
KEGG简介、如何使用KEGG进行通路富集?

点击数:0

可视化kegg通路-pathview包 | KeepNotes blog

可视化kegg通路-pathview包

Posted on

2018-08-22

Edited on
2019-11-09

In

Bioinformatics-Notes

,

Basic

Symbols count in article:
4.7k

Reading time ≈
4 mins.

Pathview是一个用于整合表达谱数据并用于可视化kegg通路的一个R包,其会先下载kegg官网上的通路图,然后整合输入数据对通路图进行再次渲染(加工?),从而对kegg通路图进行一定程度上的个性化处理 Pathview是一个bioconductor包,正常安装即可

    source("https://bioconductor.org/biocLite.R")
    biocLite("pathview")

以其自带测试数据集,对Pathview包的可视化功能做个整理,用法很简单,主要为围绕着pathview这个作图函数(参数很多,用?pathview查看下各个参数的说明),只是需要将数据整理或者整合成其需要的输入数据格式即可

先看下demo数据是什么格式,列名是每个样本名,行名是每个gene的entrez id

> head(gse16873.d)
               DCIS_1      DCIS_2       DCIS_3      DCIS_4       DCIS_5      DCIS_6
10000     -0.30764480 -0.14722769 -0.023784808 -0.07056193 -0.001323087 -0.15026813
10001      0.41586805 -0.33477259 -0.513136907 -0.16653712  0.111122223  0.13400734
10002      0.19854925  0.03789588  0.341865341 -0.08527420  0.767559264  0.15828609
10003     -0.23155297 -0.09659311 -0.104727283 -0.04801404 -0.208056443  0.03344448
100048912 -0.04490724 -0.05203146  0.036390376  0.04807823  0.027205816  0.05444739
10004     -0.08756237 -0.05027725  0.001821133  0.03023835  0.008034394 -0.06860749

先看下Pathview最常见的一种用法:将某个样本的表达量(测试数据已经是归一化后的表达量);其实也可以任何列数据,不仅仅是表达量数据,也可以是foldchange等数据,人为特定的数值型数据也行;最后以color bar的形式在kegg通路图上的对应节点展示;如下例子所示,取第一个样本的数值最为gene.data,通路选择04110,物种为hsa

p <- pathview(gene.data = gse16873.d[, 1], pathway.id = "04110", species = "hsa", out.suffix = "gse16873")
hsa04110.pathview

图中右上角color bar是可以通过参数limit来调整的,默认是limit=list(gene=1, cpd=1),即gene.data的限定范围在(-1,1),cpd.data的限定范围在c(-1,1);如果有其他需要可以设置为limit=list(gene=2, cpd=1)等;如果想最大值和最小值不对称则limit = list(gene=c(-1,2))即可

如果想将color bar分割的更加密集一些,则可以修改默认参数bins = list(gene = 10, cpd = 10)为20。。。只能说Pathview作者好细心。。

接下来看看Pathview如何展示整合数据的,如基因和代谢组的数据在kegg通路上整合可视化

先载入代谢物相关数据,如

sim.cpd.data=sim.mol.data(mol.type="cpd", nmol=3000)
> head(sim.cpd.data)
     C02787      C08521      C01043      C11496      C07111      C00031 
-1.15259948  0.46416071  0.72893247  0.41061745 -1.46114720 -0.01890809 

然后通过cpd.data参数将代谢物数据加入到pathview函数中,如:

p <- pathview(gene.data = gse16873.d[, 1], cpd.data = sim.cpd.data, 
               pathway.id = "00640", species = "hsa", out.suffix = "gse16873.cpd", 
               keys.align = "y", kegg.native = T, key.pos = "topright")
hsa00640.cpd.pathview

keys.align = "y"控制color bar对齐方式,key.pos = "topright"则是对应color bar在图上的位置(主要有bottomleft,bottomright,topleft以及topright)

Pathview不仅能整合不同组学数据(上述例子是转录组和代谢组),还可以整合多个样本的数据,比如我们在上面看到gene.data只导入了一列数据,其实Pathview支持多列(也就是多个样本)数据的导入,cpd.data也一样

如按照说明文档中的模拟一组多样本的代谢物表达谱数据(也似乎是归一化后的)

sim.cpd.data2 = matrix(sample(sim.cpd.data, 18000, replace = T), ncol = 6)
rownames(sim.cpd.data2) = names(sim.cpd.data)
colnames(sim.cpd.data2) = paste("exp", 1:6, sep = "")
> head(sim.cpd.data2, 3)
             exp1      exp2       exp3       exp4       exp5       exp6
C02787 -0.5425224 1.7940544 -0.2629972  0.2729004 -0.4897083 1.05131740
C08521 -1.1903358 0.4448658  2.6074747 -0.9163451  0.1239377 0.57827710
C01043  0.3391817 1.6855815  1.0203767 -1.3184792  0.4727454 0.03381888

然后还是使用pathview函数作图,相比上面例子增加了参数match.data = F,主要用于表示gene和cpd样本数是否要匹配;multi.state = T则表示多个样本在同一个图上显示

p <- pathview(gene.data = gse16873.d[, 1:3], cpd.data = sim.cpd.data2[, 1:2], 
               pathway.id = "00640", species = "hsa", out.suffix = "gse16873.cpd.3-2s", 
               keys.align = "y", kegg.native = T, match.data = F, multi.state = T, same.layer = T)
hsa00640.cpd.3-2s.multi.pathview

正如之前说的,Pathview不仅能展示连续性数据,还可以展示离散型数据(如:差异显著OR不显著,上调OR下调等),我先模拟一个(0,1)离散型数据

testdata2 <- data.frame(sample1=sample(c(0,1), 10000, replace = T), stringsAsFactors = F)
row.names(testdata2) <- row.names(gse16873.d)[1:10000]

然后在pathview函数中将limit = list(gene = c(0,1))bins = list(gene = 1)设置为一致;由于默认颜色是低(绿色),中(灰色),高(红色),而我们测试数据是0,1两个数字,所以需要将mid设置为红色mid = list(gene = "red"),这样0就是绿色,1就是红色了

p <- pathview(gene.data = testdata, pathway.id = "00640", species = "hsa", 
               out.suffix = "test.genes",discrete = list(gene = T), kegg.native = T, 
               limit = list(gene = c(0,1)), bins = list(gene = 1), mid = list(gene = "red"))
hsa00640.test.genes

从我们之前的测试数据中可看到,pathview函数默认使用的Id是entrez id,从默认参数gene.idtype="entrez"可得;对于绝大多数真核生物来说,其entrez id确实等于其对应的kegg id,但是有些物种还是特例的,比如拟南芥。。。当然Pathview包给出了一些id转化方法(但我一般不用,因为我比较喜欢自己来转化);因此一般我们能拿到的就已经是kegg id了,比如拟南芥的ath:AT4G17260,这是需要设置gene.idtype=kegg,这里需要注意的,gene.data参数输入的不是ath:AT4G17260而是AT4G17260,下面以一个例子说明

先模拟一个数据

testid <- data.frame(expr = rnorm(5), stringsAsFactors = F)
row.names(testid) <- c("AT4G17260", "AT2G14170", "AT2G20420", "AT1G06550", "AT1G36160")

然后还是以通路00640为例,物种是拟南芥

p <- pathview(gene.data = testid, pathway.id = "00640", species = "ath", 
               gene.idtype = "kegg", out.suffix = "testid")
ath00640.testid

但是当物种是kegg未收录的物种,这是可能用的不再是kegg id还是K号,如K00016,这时的通路则是KEGG ortholog pathways,物种设定为ko,即:species = "ko"

testko <- data.frame(expr = rnorm(5), stringsAsFactors = F)
row.names(testko) <- c("K00016", "K01026", "K00140", "K18371", "K17741")
ko00640.testko

上述大概是Pathview包主要的用法了,如果有需要可以再从头看下其说明文档http://bioconductor.org/packages/release/bioc/vignettes/pathview/inst/doc/pathview.pdf

本文出自于http://www.bioinfo-scrounger.com转载请注明出处

点击数:0