oncoplot (瀑布图)经常出现在肿瘤研究中的Fig1 ,可以展示多种变异类型的全景图。
前面介绍过了使用maftools包 对MAF文件进行绘制maftools | 从头开始绘制发表级oncoplot(瀑布图),以及使用ComplexHeatmap 包对excel文件进行绘制ComplexHeatmap|根据excel表绘制突变景观图(oncoplot)。
当我只有基因和变异类型的时候,那就想办法整理成 excel的形式,然后使用ComplexHeatmap绘制。
一 载入R包,数据
#加载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的就用逗号分隔就行。
二 数据转化
#尝试转化
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即可
f.agg <- function(x) paste(x, collapse =";")
OK,都准备好了,转成输入文件样式的宽型数据吧
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)多少种展示的标签
#指定颜色, 调整颜色代码即可
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函数绘制即可
#画图
oncoPrint(mat,
alter_fun = alter_fun, col = col,
column_title = column_title,
heatmap_legend_param = heatmap_legend_param)
这里只是提供绘制的思路和代码,更美观的配色和合理的位置,高度和宽度设置,还是需要进行调试的。
更多的优化调整方式,添加注释方式详见ComplexHeatmap|根据excel表绘制突变景观图(oncoplot)
◆ ◆ ◆ ◆ ◆
精心整理(含图PLUS版)|R语言生信分析,可视化(R统计,ggplot2绘图,生信图形可视化汇总)