maftools画瀑布图(oncoplot)

什么是瀑布图

这种由麦肯锡顾问公司所独创的图表类型,因为形似瀑布流水而被称之为瀑布图( Waterfall Plot)。瀑布图具有自上而下的流畅效果,也可以称为阶梯图(Cascade Chart)或桥图(Bridge Chart)。对于生命科学领域的学者来说改良后的瀑布图(也有成为组图的)可直观展示多个维度的数据,对于组学分析结果的展示就比较有优势,肿瘤相关的文章使用这种图的特别多。下面小编就带着大家用maftoos这个R语言包从变异的注释结果出发绘制可直接用于文章发表的组图。

1.安装包,加载包

> source("http://bioconductor.org/biocLite.R")
> biocLite("maftools")
> library(maftools)

注:安装比较耗时(网速好的话会快些),R版本要求3.3以上。个人经验最好也不要使用最新版本,新版R总会对那么一些“老包”不够友好。亲测3.6.1可行。

2.数据准备

其实如果你对MAF格式足够了解,并且熟练一门文本处理语言,那么无论你的变异数据(已完成基本的注释)用什么格式存储都无所谓,自己写个脚本处理就好。但实际上变异一般以VCF格式存储,而我们最常用的变异注释工具还是ANNOVAR。那么我们今天就仅介绍适合大多数人的情况--从ANNOVAR注释的结果文件开始。需要注释以下几点:
1,ANNOVAR注释的结果相信大家都见过,我们这里用TXT格式的而不是vcf格式的!
2,maftools仅能识别注释为insertion或者deletion的InDel,substitution则不能有效识别,所以如果substitution丢了别感到意外。
3,注释文件需要额外加一列样本名(head可以为Tumor_Sample_Barcode,当然你不用样本名称而用其他ID来区分样本也可以),如果多个样本中都有这个变异,那么分成多行展示。
3,对于InDel的注释还要注意一点,如果ANNOVAR注释是输入的不是VCF文件而是“avinput”,那么需要注意ref和alt的书写。VCF文件一般ref和alt两列都是碱基,但如果avinput也这么写的话注释结果都将是substitution,而没有insertion和deletion。所以对于insertion来说ref列应为“-”,而deletion的alt列应为“-”,坐标位置也要相应的调整。
4,还有一个坑,在ANNOVAR注释完大家看看Func_refGene列和ExonicFunc_refGene列有没有出现用“;”隔开重复多次的现象(如下图),如果有一定要去掉这种重复,否则会把这样的变异都处理成RNA。


image.png

3.maf格式转换

将加上“Tumor_Sample_Barcode”,的注释文件转换成maf格式:

library("maftools")
annovarToMaf("All.anno.hg19_multianno.txt",  Center = NULL,  refBuild = "hg19",  tsbCol = 'Tumor_Sample_Barcode',  table = "refGene",  ens2hugo = FALSE,  basename = "All",  sep = "\t",  MAFobj = FALSE,  sampleAnno = NULL)
#说一下几个重要的参数:
#第一个参数是输入文件(处理后的注释文件)
# refBuild参考基因组版本
#tsbCol样本名那一列的列名
#table注释基因名使用的数据库,可以是refGene,也可以是ensGene(ensemble数据库)
#ens2hugo,如果table是refGene,这个参数给FALSE,如果是ensGene则需要给TRUE(将ensemble ID转换成hugo symbols)
#basename输出文件名前缀
#sep输出文件分隔符

4.展示summary信息

maf <- read.maf(maf = "All.maf")#读入上一步输出的maf文件
pdf("summary.pdf", width=6, height=6)#图片输出文件名
plotmafSummary(maf =maf, rmOutlier = TRUE, addStat = 'median', dashboard = TRUE, titvRaw = FALSE)#绘制maf的总结文件
dev.off()

输出的图示例如下:


image.png

5.初版瀑布图绘制

pdf("oncoplot.pdf", width=6, height=6)#图片输出文件名
oncoplot(maf =maf, fontSize = 0.45 ,showTumorSampleBarcodes = T,SampleNamefontSize=0.7,titleFontSize=1.2,legendFontSize=0.7,removeNonMutated=F,writeMatrix=T)#绘制maf的总结文件
dev.off()

输出的图示例如下:


image.png

介绍一下上面用到的参数:
fontSize :基因名的字体大小
showTumorSampleBarcodes:是否展示样本名/样本ID
SampleNamefontSize:样本名字体大小
titleFontSize:图题头的字体大小
legendFontSize:图例字体大小
removeNonMutated:是否删除没有突变的样本
writeMatrix:是否把突变矩阵输出成表格(与图的突变对应)

6.添加临床信息

很多情况我们需要把临床信息(分组,OS值等)添加到图上,先整理临床信息表格,这个表格中一定要有与maf的“Tumor_Sample_Barcode”一致的样本信息列,格式示例如下:


image.png

将该数据读入R

clin <- read.table("All.clinical_feature",header=TRUE)
maf <- read.maf(maf = "All.maf", clinicalData = clin)#注意读取maf时需要增加临床表型信息
pdf("All.oncoplot.clin.pdf", width=6, height=6)
oncoplot(maf =maf, fontSize = 0.45 ,showTumorSampleBarcodes = T ,clinicalFeatures = 'ORR',titleFontSize=1.2,legendFontSize=0.7,removeNonMutated=F,writeMatrix=T,annotationFontSize=0.7)
dev.off()

输出的图片示例:


image.png

7.其他调整

1)按照临床信息进行排序

oncoplot(maf =maf, fontSize = 0.45 ,showTumorSampleBarcodes = T ,clinicalFeatures = 'ORR',titleFontSize=1.2,legendFontSize=0.7,removeNonMutated=F,writeMatrix=T,annotationFontSize=0.7,sortByAnnotation = TRUE)
image.png

可以看到按照ORR值进行了排序;
2)仅展示部分基因及基因排序
默认的情况下会展示maf值排序后的top20,如果你仅关注某个通路上的基因,可以制定自己的gene list

gene<-c("KEAP1","NFE2L2","STK11","PTEN","PIK3CA","PIK3CB","AKT1","AKT2","AKT3","MTOR","PIK3R1","PPP2R1A","TSC1","TSC2","RICTOR","RPTOR")
oncoplot(maf =maf, fontSize = 0.45 ,showTumorSampleBarcodes = T ,clinicalFeatures = 'ORR',titleFontSize=1.2,legendFontSize=0.7,removeNonMutated=F,writeMatrix=T,annotationFontSize=0.7,sortByAnnotation = TRUE,genes=gene,keepGeneOrder=TRUE)

输出图片示例:


image.png

也可以对这些进行的顺序进行控制

gene<-c("KEAP1","NFE2L2","STK11","PTEN","PIK3CA","PIK3CB","AKT1","AKT2","AKT3","MTOR","PIK3R1","PPP2R1A","TSC1","TSC2","RICTOR","RPTOR")
oncoplot(maf =maf, fontSize = 0.45 ,showTumorSampleBarcodes = T ,clinicalFeatures = 'ORR',titleFontSize=1.2,legendFontSize=0.7,removeNonMutated=F,writeMatrix=T,annotationFontSize=0.7,sortByAnnotation = TRUE,genes=gene,keepGeneOrder=TRUE)
image.png

3)样本排序
如果你想按照表达量高低对样本进行排序,也可以指定样本顺序:

sampeOrder<-c("A","AA","AB","AC","AD","AE","AF","AG","AH","AI","AJ","AK","AL","AM","AN","AO","AP","AQ","AR","AS","AT","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z")
oncoplot(maf =maf, fontSize = 0.45 ,showTumorSampleBarcodes = T ,clinicalFeatures = 'ORR',titleFontSize=1.2,legendFontSize=0.7,removeNonMutated=F,writeMatrix=T,annotationFontSize=0.7,sortByAnnotation = TRUE,genes=gene,keepGeneOrder=TRUE,sampleOrder=sampeOrder)
image.png

4)对clinicalFeatrue进行颜色设定

col_PD.L1_expression=pal_jama("default",alpha=0.8)(3)
assign_PD.L1_expression=setNames(col_PD.L1_expression,unique(clinicaldata$PD.L1_expression))
col_bTMB=c("#743A3A","#484891")
assign_bTMB=setNames(col_bTMB,unique(clinicaldata$bTMB))
col_BOR=pal_jama("default",alpha=0.8)(5)
assingn_BOR=setNames(col_BOR,unique(clinicaldata$BOR))
col_PFS=c("#743A3A","#484891")
assign_PFS=setNames(col_PFS,unique(clinicaldata$PFS))
col_OS=c("#743A3A","#484891")
assign_OS=setNames(col_OS,unique(clinicaldata$OS))
col_Smoking_status=pal_jama("default",alpha=0.8)(3)
assign_Smoking_status=setNames(col_Smoking_status,unique(clinicaldata$Smoking_status))
oncoplot(maf =maf, fontSize = 0.35 ,showTumorSampleBarcodes = T ,clinicalFeatures = c('PD.L1_expression','bTMB','BOR','PFS','Smoking_status','OS'),titleFontSize=1.2,legendFontSize=0.7,,SampleNamefontSize=0.6,removeNonMutated=F,writeMatrix=T,annotationFontSize=0.5,sortByAnnotation = TRUE,genes=gene,keepGeneOrder=TRUE,sampleOrder=sampeOrder,annotationColor = list(PD.L1_expression=assign_PD.L1_expression,bTMB=assign_bTMB,BOR=assingn_BOR,PFS=assign_PFS,OS=assign_OS,Smoking_status=assign_Smoking_status))
image.png

8.其他需要注意的

maftools画瀑布图很方便,但对于临床表型仅能展示离散型的,对于连续型的不是很友好,不能画成barplot的形式,只能单独用连续表型画个barplot然后在AI拼到一起。为了解决这个问题推荐使用ComplexHeatmap

原创文字,如果觉得对你有帮助留下你的赞哦~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容