本文首发于“生信补给站”:https://mp.weixin.qq.com/s/8kz2oKvUQrCR2_HWYXQT4g

如果有maf格式的文件,可以直接oncoplot包绘制瀑布图,有多种展示和统计maftools | 从头开始绘制发表级oncoplot(瀑布图)maftools|TCGA肿瘤突变数据的汇总,分析和可视化,如果只有多个样本的基因突变与否的excel,不用担心,也可以用complexheatmap包绘制。

这个包功能很强大,本次只简单的介绍如何绘制基因组景观图(瀑布图)。

一 载入R包,数据

#if (!requireNamespace("BiocManager", quietly = TRUE))
# install.packages("BiocManager")
#BiocManager::install("ComplexHeatmap")
#install.packages("openxlsx")
#install.packages("circlize")

#后面直接加载即可
library(openxlsx)
library(ComplexHeatmap)
library(circlize)
#读入数据
mut <- read.xlsx("TCGA_data.xlsx",sheet = "突变信息")
cli <- read.xlsx("TCGA_data.xlsx",sheet = "临床信息")

查看变异数据

rownames(mut) <- mut$sample
mat <- mut[,-1]
mat[is.na(mat)]<-""
mat[1:6,1:6]

二 绘制突变景观图

2.0 绘制“初始”瀑布图

oncoPrint(mat)

可以展示结果,但是为了paper,还需要一些调整!

2.1 指定变异类型的颜色和形状大小

#指定颜色, 调整颜色代码即可
col <- c( "mutation" = "blue" , "indel" = "green")
#指定变异的样子,x,y,w,h代表变异的位置(x,y)和宽度(w),高度(h)
alter_fun <- list(
 background = function(x, y, w, h) {
   grid.rect(x, y, w-unit(0.5, "mm"), h-unit(0.5, "mm"),
             gp = gpar(fill = "#CCCCCC", col = NA))
},
 mutation = function(x, y, w, h) {
   grid.rect(x, y, w-unit(0.5, "mm"), h-unit(0.5, "mm"),
             gp = gpar(fill = col["mutation"], col = NA))
},
 indel = function(x, y, w, h) {
   grid.rect(x, y, w-unit(0.5, "mm"), h*0.33,  
             gp = gpar(fill = col["indel"], col = NA))
}
)

#指定变异类型的标签,和数据中的类型对应
heatmap_legend_param <- list(title = "Alternations",
                            at = c("mutation","indel"),
                            labels = c( "mutation","indel"))

绘制景观图

#设定标题
column_title <- "This is Oncoplot "  
#画图并去除无突变的样本和基因
oncoPrint(mat,
         alter_fun = alter_fun, col = col,
         column_title = column_title,
         heatmap_legend_param = heatmap_legend_param)

2.2 简单的调整

oncoPrint(mat,
         alter_fun = alter_fun, col = col,
         column_title = column_title,
         remove_empty_columns = TRUE, #去掉空列
         remove_empty_rows = TRUE, #去掉空行
         row_names_side = "left", #基因在左
         pct_side = "right",
         heatmap_legend_param = heatmap_legend_param)

三 添加注释信息

3.1 指定临床注释信息

pdata <- cli
head(pdata)

#对应患者
pdata <- subset(pdata,pdata$sampleID %in% colnames(mat))
mat <- mat[, pdata$sampleID]
#定义注释信息
ha<-HeatmapAnnotation(Age=pdata$age,
                     Gender=pdata$gender,
                     GeneExp_Subtype  = pdata$GeneExp_Subtype ,
                     censor = pdata$censor,
                     os = pdata$os,
                     show_annotation_name = TRUE,
                     annotation_name_gp = gpar(fontsize = 7))

3.2 瀑布图 + 临床注释

oncoPrint(mat,
         bottom_annotation = ha, #注释信息在底部
         alter_fun = alter_fun, col = col,  
         column_title = column_title, heatmap_legend_param = heatmap_legend_param )

此处使用默认颜色注释,有时候会比较接近,且“变动”

3.3 自定义注释颜色以及顺序

#自定义样本顺序
s <- pdata[order(pdata$censor,pdata$GeneExp_Subtype),]
sample_order <- as.character(s$sampleID)

#自定义颜色
#连续性变量设置颜色(外)
col_os = colorRamp2(c(0, 4000), c("white", "red"))
ha<-HeatmapAnnotation(Age=pdata$age,
                    Gender=pdata$gender,
                    GeneExp_Subtype  = pdata$GeneExp_Subtype ,
                    censor = pdata$censor,
                    os = pdata$os,
                    #指定颜色
                    col = list(censor = c("death" =  "red", "alive" = "blue"),
                               GeneExp_Subtype = c("Classical" = "orange","Mesenchymal" = "green","Neural" = "skyblue" ),
                               os = col_os),
                    show_annotation_name = TRUE,
                    annotation_name_gp = gpar(fontsize = 7))

绘制瀑布图

oncoplot_anno = oncoPrint(mat,bottom_annotation = ha,
            alter_fun = alter_fun, col = col,
            column_order = sample_order,
            remove_empty_columns = TRUE, #去掉空列
            remove_empty_rows = TRUE, #去掉空行
            column_title = column_title, heatmap_legend_param = heatmap_legend_param)
oncoplot_anno

注:颜色不一定好看,只是为了当默认的颜色比较接近时,或者有要求时候,可以自定义。

3.4 调整注释的位置

draw(oncoplot_anno ,annotation_legend_side = "bottom")

更改注释的位置,方便后续拼图需求。

更多参数:

https://github.com/jokergoo/ComplexHeatmap

PS:觉得内容有帮助的话,可以点点在看和转发,新机制下容易失踪。

ComplexHeatmap|根据excel表绘制突变景观图(oncoplot)的更多相关文章

  1. 使用Excel 2007绘制甘特图

    本文将教大家如何使用Excel 2007制作甘特图.Excel并未提供甘特图类型,但还是可以绘制甘特图的,方法就是通过对堆积条形图类型进行自定义,使之显示任务.任务工期和层次结构. 下面的过程可帮助创 ...

  2. python爬取股票最新数据并用excel绘制树状图

    大家好,最近大A的白马股们简直 跌妈不认,作为重仓了抱团白马股基金的养鸡少年,每日那是一个以泪洗面啊. 不过从金融界最近一个交易日的大盘云图来看,其实很多中小股还是红色滴,绿的都是白马股们. 以下截图 ...

  3. ASPNET 导出EXCEL表

    其实网上有很多关于Excel的例子,但是不是很好,他们的代码没有很全,读的起来还很晦涩.经过这几天的摸索,终于可以完成我想要导出报表Excel的效果了.下面是我的效果图. 一.前台的页面图 GridV ...

  4. 用EXcel制作不同背景的图

    Excel 绘图区分区设置不同背景色 之 条形图 样图 在Excel图表中,如对绘图区设置背景色,一般只能对整个绘图区设置同一种颜色.图案或图片为背景.但有时希望能对不同的分区设置不同的颜色作为背景, ...

  5. excel表中内容如何反排列

    如题,我的意思是,比如excel表中有如下内容: 1.红色 2.黄色 3.蓝色 现在我需要一次性全部反向排列,变成 3.蓝色 2.黄色 1.红色 这不是纯数字排序,因为我序号不是自然数的等差数列,其中 ...

  6. ASP.NET导出excel表方法汇总

    asp.net里导出excel表方法汇总  1.由dataset生成 public void CreateExcel(DataSet ds,string typeid,string FileName) ...

  7. sql server数据库将excel表中的数据导入数据表

    一般有两种方法可以实现,一种是直接写sql语句,另外一种是利用sqlserver的管理工具实现.这里介绍的是后面一种方法. 步骤: 一.准备数据 1.将excel表另存为文本格式,注意文本格式需为ta ...

  8. 【Access2007】将Excel表导入到Access2007在现有的表成

    将Excel表导入到Access2007,你会发现邪恶Access2007这将帮助你自己主动创建表.您是否想插入完全没问你到一个现有的表. 然后,我们需要解决这个问题: 一.常的步骤先将Excel表导 ...

  9. 解决将Excel表导入到SQL Server数据库时出现Text was truncated or one or more characters had no match in the target code错误

    编写python爬虫程序可以在电商.旅游等网站上爬取相关评论数据,这些数据可以用于词云制作.感情词分析.提取关键词等,也可以将爬取下来的数据以自己的方式进行展示.评论数据爬取下来后,就要考虑怎样入库, ...

随机推荐

  1. vue项目报错Missing space before function parentheses的问题

    问题描述为——函数括号前缺少空格 导致原因主要是,使用eslint时,严格模式下,会报错Missing space before function parentheses的问题,意思是在方法名和刮号之 ...

  2. [JavaWeb基础] 023.线程安全(二)

    上一篇我们讲解了线程安全的问题,那么要解决线程安全的问题,我们就必须用到线程同步,保证线程之间不互相影响而产生脏数据,下面我们来讲讲具体的实现吧. 首先我们看下例子,我们有个Outputter类,用于 ...

  3. [Office#PPT]0001.实例剖析-如何制作一个牛B的融资PPT

    一些好公司明明在模式上富有创新性,但却在 pitch 时很保守,而且他们又不缺设计和开发能力.如何设计你的融资演讲稿才会吸引投资人对你投资?投资人 Daniel Eckler给大家贡献了下面这篇技术贴 ...

  4. 重装ArchLinux后修改GRUB配置不生效问题的解决

    重装ArchLinux后修改GRUB配置不生效问题的解决 mount指令看一下挂载,或者vim /etc/fstab看一下有没有/boot,看看fstab是不是没写进去.... 我特喵昨天重装完Arc ...

  5. 使用turtle库绘制奥运五环

    import turtle as t t.setup(600,600,50,50) t.pensize(3) t.pencolor("red") t.penup() t.pendo ...

  6. Java实现 LeetCode 741 摘樱桃(DFS || 递推 || 传纸条)

    741. 摘樱桃 一个N x N的网格(grid) 代表了一块樱桃地,每个格子由以下三种数字的一种来表示: 0 表示这个格子是空的,所以你可以穿过它. 1 表示这个格子里装着一个樱桃,你可以摘到樱桃然 ...

  7. Java实现 LeetCode 542 01 矩阵(暴力大法,正反便利)

    542. 01 矩阵 给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离. 两个相邻元素间的距离为 1 . 示例 1: 输入: 0 0 0 0 1 0 0 0 0 输出: 0 0 0 ...

  8. Java实现 LeetCode 522 最长特殊序列 II(查找最长的非子序列的长度)

    522. 最长特殊序列 II 给定字符串列表,你需要从它们中找出最长的特殊序列.最长特殊序列定义如下:该序列为某字符串独有的最长子序列(即不能是其他字符串的子序列). 子序列可以通过删去字符串中的某些 ...

  9. Java实现 LeetCode 543 二叉树的直径

    543. 二叉树的直径 给定一棵二叉树,你需要计算它的直径长度.一棵二叉树的直径长度是任意两个结点路径长度中的最大值.这条路径可能穿过根结点. 示例 : 给定二叉树 1 / \ 2 3 / \ 4 5 ...

  10. Java实现 LeetCode 172 阶乘后的零

    172. 阶乘后的零 给定一个整数 n,返回 n! 结果尾数中零的数量. 示例 1: 输入: 3 输出: 0 解释: 3! = 6, 尾数中没有零. 示例 2: 输入: 5 输出: 1 解释: 5! ...