使用oncoPrint绘制瀑布图

杀杀
生信分析中,我们在全基因组测序后会获得分子突变谱信息,如何直观地将各种疾病分子亚型下的基因突变特征,以及分子共突变/互斥突变的特征展示出来呢?

我们可以使用R语言中一个非常方便的包来实现大样本数据中基因突变/表达总体特征的可视化,也就是大概这个样子->
胶质瘤基因突变和临床信息瀑布图展示

好了让我们来学习它
首先安装和加载包

library(ComplexHeatmap) 
library(circlize)
library(RColorBrewer)  #这是一个颜色搭配包

我们需要导入两部分数据,一部分是分子突变信息数据,另一部分是临床特征数据

首先是分子突变数据:
分子突变谱
在有突变信息的地方展示突变类型,其余地方为空(空着就好不用NA)

这个表格的制作比较基础,就不多介绍,从TCGA数据库(胶质瘤的CGGA数据库直接是整理好的表格)中下下来的原始数据中都有突变类型注释,直接转换成表格即可。

制作需要展现的基因列表,有些基因基本上就没突变,或不关心,就不需要展示,也可以直接从excel表格导入

genelist <- c("IDH1","IDH2","TP53","ATRX","PTEN","EGFR","NF1","PIK3CA")
interestgene_matrix <- TCGA_mut_matrix_2016[match(genelist,rownames(TCGA_mut_matrix_2016)),]

将我们感兴趣的基因的突变谱取出准备画图

接下来要为热图准备一些注释信息,首先是每个突变的颜色,所有的突变类型都可以设置,我比较习惯取自己喜欢的颜色,也可以用颜色包

col <- c( "missense_variant" = "#0072b4","splice_acceptor_variant" = "#e29e3e",
"stop_gained" = "#008f8c", "frameshift_variant" = "#e29e3e",
"inframe_deletion" = "#e8c31c","synonymous_variant" = "#9ec66d")

接下来这一步很重要,给背景以及每个突变类型设置形状和颜色,如果不运行这一步,接下来的主函数将不会自动给你分配颜色和大小,会报错

另外,这边的h*0.8会在图中每行的基因突变条间留一些空隙,大家可以乘不同的数值试试看

alter_fun <- list(
 background = function(x, y, w, h) {
   grid.rect(x, y, w-unit(0.5, "mm"), h*0.8, 
             gp = gpar(fill = "#e8e7e3", col = NA))
},
 missense_variant = function(x, y, w, h) {
   grid.rect(x, y, w-unit(0.5, "mm"), h*0.8,
             gp = gpar(fill = col["missense_variant"], col = NA))
},
 splice_acceptor_variant = function(x, y, w, h) {
   grid.rect(x, y, w-unit(0.5, "mm"), h*0.8,
             gp = gpar(fill = col["splice_acceptor_variant"], col = NA))
},
 stop_gained = function(x, y, w, h) {
   grid.rect(x, y, w-unit(0.5, "mm"), h*0.8,
             gp = gpar(fill = col["stop_gained"], col = NA))
},
 frameshift_variant = function(x, y, w, h) {
   grid.rect(x, y, w-unit(0.5, "mm"), h*0.8,
             gp = gpar(fill = col["frameshift_variant"], col = NA))
},
 inframe_deletion = function(x, y, w, h) {
   grid.rect(x, y, w-unit(0.5, "mm"), h*0.8,
             gp = gpar(fill = col["inframe_deletion"], col = NA))
},
 synonymous_variant = function(x, y, w, h) {
   grid.rect(x, y, w-unit(0.5, "mm"), h*0.8,
             gp = gpar(fill = col["synonymous_variant"], col = NA))
}
)

接下来设置图例

heatmap_legend <- list(title = "Alternations",
                            at = c("missense_variant", "splice_acceptor_variant",
"stop_gained", "frameshift_variant", "inframe_deletion", "synonymous_variant",
"start_lost", "splice_region_variant", "splice_donor_variant",
"intron_variant", "stop_lost", "coding_sequence_variant","Mutant","Methylated","Codel"),
                            labels = c("missense_variant", "splice_acceptor_variant",
"stop_gained", "frameshift_variant", "inframe_deletion", "synonymous_variant",
"start_lost", "splice_region_variant", "splice_donor_variant",
"intron_variant", "stop_lost", "coding_sequence_variant","Mutant","Methylated","Codel"))

接下来就可以画突变图啦:使用的就是下面这个oncoPrint函数

oncoPrint(interestgene_matrix ,  #数据
         alter_fun = alter_fun, col = col,
         column_title = column_title,
#这两行是设置要不要去掉空行和空列 remove_empty_columns = FALSE, 
#去掉空行 remove_empty_rows = FALSE, 
         row_names_side = "left", #我们可以把基因信息放左边
         pct_side = "right",
      #这个设不设置好像影响不大 alter_fun_is_vectorized = FALSE,
         heatmap_legend_param = heatmap_legend,  #设置图例
         )

接下来我们可以导入对应的临床信息,比如肿瘤等级,分型,生存,性别信息等等。

数据大概长这样
临床信息表展示
需要注意一下,临床信息里的每行样本顺序需要和前面突变谱的每列样本对应起来

接下来简单设置一下临床信息函数:$后面加上想要展示的列名

clini <- HeatmapAnnotation(Age=TCGA_clin_2016$AGE,
                     Gender=TCGA_clin_2016$SEX, 
                     GRADE  = TCGA_clin_2016$GRADE ,
                     HISTOLOGICAL_DIAGNOSIS  = TCGA_clin_2016$HISTOLOGICAL_DIAGNOSIS ,
                     OS_MONTHS = TCGA_clin_2016$OS_MONTHS,
                     show_annotation_name = TRUE,
                     annotation_name_gp = gpar(fontsize = 7))

然后在刚刚的主函数中加上你的临床信息即可

oncoplot_tcga2016 <- oncoPrint(interestgene_matrix ,
         alter_fun = alter_fun, col = col,
         column_title = column_title,
         row_names_side = "left", 
         pct_side = "right",
         alter_fun_is_vectorized = FALSE,
         heatmap_legend_param = heatmap_legend,
         bottom_annotation = clini 
         )
oncoplot_tcga2016 

需要注意的是,如果你不为临床信息设置颜色的话,每一次运行出来的颜色可能是不一样的,所以你可以设置一下颜色,以防随机的颜色影响美观:

col_os = colorRamp2(c(0, 4000), c("white", "blue"))
clini <- HeatmapAnnotation(TCGA_clin_2016$AGE,
                     Gender=TCGA_clin_2016$SEX, 
                     GRADE  = TCGA_clin_2016$GRADE ,
                     HISTOLOGICAL_DIAGNOSIS  = TCGA_clin_2016$HISTOLOGICAL_DIAGNOSIS ,
                     OS_MONTHS = TCGA_clin_2016$OS_MONTHS,
                     #设置颜色
                     col = list(GRADE  = c("II" = "orange","III" = "green","IV" = "skyblue" ),os = col_os),
                     show_annotation_name = TRUE,
                     annotation_name_gp = gpar(fontsize = 7))

另外,有时我们需要根据需求优先对一些信息进行排序,这可以直接通过对数据排序实现。

当画图完成之后,可以将oncoPrint的结果赋值,并且使用draw函数,其中annotation_legend_side 参数可以将图例放在下面,让图片整体美观一些。

pdf("tcga2016result1.pdf") ##导出pdf文件
draw(oncoplot_tcga2016,annotation_legend_side = "bottom")
dev.off()

CGGA的这个网站里提供了一些他们的数据和代码,以及生成的图片,大家可以取数据下来尝试一下
http://www.cgga.org.cn/analyse/WEseq-data-oncoprint-result.jsp

参考网址:
https://jokergoo.github.io/ComplexHeatmap-reference/book/oncoprint.html
https://mp.weixin.qq.com/s/8kz2oKvUQrCR2_HWYXQT4g

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

推荐阅读更多精彩内容