前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于我只有基因和变异类型,还想做oncoplot(瀑布图)这件事!

关于我只有基因和变异类型,还想做oncoplot(瀑布图)这件事!

作者头像
生信补给站
发布2022-11-11 18:57:42
1.2K0
发布2022-11-11 18:57:42
举报
文章被收录于专栏:生信补给站生信补给站

oncoplot (瀑布图)经常出现在肿瘤研究中的Fig1 ,可以展示多种变异类型的全景图。

前面介绍过了使用maftools包 对MAF文件进行绘制maftools | 从头开始绘制发表级oncoplot(瀑布图),以及使用ComplexHeatmap 包对excel文件进行绘制ComplexHeatmap|根据excel表绘制突变景观图(oncoplot)

当我只有基因和变异类型的时候,那就想办法整理成 excel的形式,然后使用ComplexHeatmap绘制。

一 载入R包,数据

代码语言:javascript
复制
#加载R包
library(tidyverse)
library(openxlsx)
library(reshape2)
library(ComplexHeatmap)

#读取数据
data <- read.xlsx("test.xlsx",sheet = 1)
head(data)
tail(data)

信息好少,但是好在绘制瀑布图的核心信息都在。

A:距离maf文件差距好大,放弃!

B:距离推文的excel表格(下图),好像差异不大 。

就是长 转 宽 ,然后多种Exonic_Function的就用逗号分隔就行

二 数据转化

长型,宽型互转的方式有很多,可以使用tidyr包的gather ,spread函数进行长宽互转Tidyverse|tidyr数据重塑之gather,spread(长数据宽数据转化) ;也可以使用 reshape2包的melt 和 cast函数进行长宽互转数据处理|数据框重铸

2.1 使用reshape2包的dcast函数

代码语言:javascript
复制
#尝试转化
dcast <- dcast(data, gene~ sample)
head(dcast)

和想象的好像有点不一样,是不是有很多问号❓

这里不应该是基因名字吗?为什么是数值?数值又代表的什么含义呢?

注意看一下提示信息,“Aggregation function missing: defaulting to length” ,提到因为Aggregation function missing,默认是length。说明现在的数值代表length ,而length也就是个数。

那如果Aggregation function 不默认,是用什么参数设置呢?可以自定义成Exonic_Function使用逗号连接吗?

2.2 擅长使用R帮助

使用 ?dcast 看一下,发现fun.aggregate就是我们想要的参数,😄

下面再构建一个 完成逗号连接 的函数即可,这个使用paste即可

代码语言:javascript
复制
f.agg <- function(x) paste(x, collapse =";")

OK,都准备好了,转成输入文件样式的宽型数据吧

代码语言:javascript
复制
f.agg <- function(x) paste(x, collapse =";")
a <- dcast(data, gene~ sample,fun.aggregate = f.agg )

rownames(a) <- a$gene
mat <- a[,-1]
mat[is.na(mat)]<-""
mat[1:6,1:5]

可以看到数据转化完成,接下来就是可视化了。

三 绘制瀑布图

这里需要注意的就是有多少种Exonic_Function类型,就指定(1)多少种颜色,(2)多少种位置,高度和宽度 以及(3)多少种展示的标签

代码语言:javascript
复制
#指定颜色, 调整颜色代码即可
col <- c( "MISSENSE_VARIANT" = "blue" , "INFRAME_DELETION" = "green" ,
          "STOP_GAINED" = "yellow" , "SYNONYMOUS_VARIANT" = "red",
          "INFRAME_INSERTION" = "black" )
#指定变异的样子,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))
  },
  MISSENSE_VARIANT = function(x, y, w, h) {
    grid.rect(x, y, w-unit(0.5, "mm"), h-unit(0.5, "mm"),
              gp = gpar(fill = col["MISSENSE_VARIANT"], col = NA))
  },
  INFRAME_DELETION = function(x, y, w, h) {
    grid.rect(x, y, w-unit(0.5, "mm"), h*0.33,  
              gp = gpar(fill = col["INFRAME_DELETION"], col = NA))
  },
  STOP_GAINED = function(x, y, w, h) {
    grid.rect(x, y, w-unit(0.5, "mm"), h-unit(0.7, "mm"),
              gp = gpar(fill = col["STOP_GAINED"], col = NA))
  },
  SYNONYMOUS_VARIANT = function(x, y, w, h) {
    grid.rect(x, y, w-unit(0.5, "mm"), h*0.7,  
              gp = gpar(fill = col["SYNONYMOUS_VARIANT"], col = NA))
  },
  INFRAME_INSERTION = function(x, y, w, h) {
    grid.rect(x, y, w-unit(0.5, "mm"), h*0.8,  
              gp = gpar(fill = col["INFRAME_INSERTION"], col = NA))
  }
)

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

使用complexheatmap的oncoPrint函数绘制即可

代码语言:javascript
复制
#画图
oncoPrint(mat,
          alter_fun = alter_fun, col = col,
          column_title = column_title,
          heatmap_legend_param = heatmap_legend_param)

这里只是提供绘制的思路和代码,更美观的配色和合理的位置,高度和宽度设置,还是需要进行调试的。

更多的优化调整方式,添加注释方式详见ComplexHeatmap|根据excel表绘制突变景观图(oncoplot)

R 可视化的代码和例子很多,如何处理成可以用的 “输入文件” ,是件比较耗时 但是很核心的内容。

◆ ◆ ◆ ◆ ◆

精心整理(含图PLUS版)|R语言生信分析,可视化(R统计,ggplot2绘图,生信图形可视化汇总)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-08-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信补给站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 长型,宽型互转的方式有很多,可以使用tidyr包的gather ,spread函数进行长宽互转Tidyverse|tidyr数据重塑之gather,spread(长数据宽数据转化) ;也可以使用 reshape2包的melt 和 cast函数进行长宽互转数据处理|数据框重铸 。
  • 2.1 使用reshape2包的dcast函数
  • R 可视化的代码和例子很多,如何处理成可以用的 “输入文件” ,是件比较耗时 但是很核心的内容。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档