在进行snp分析过程中,我们会使用一个图形来展示突变的情况,如下图所示
使用GenVisR包绘制,这个包是专门用来绘制表达变异信息的snp图(数据格式如下)
基因的变异信息
分组信息
脚本如下:
library(GenVisR)
rt=read.table(“waterfallInput2.txt”,header=T,sep="\t",check.names=F,quote="")
clinical=read.table(“clinical2.txt”,header=T,sep="\t",check.names=F)
Melt the clinical data into ‘long’ format.
library(reshape2)
clinical <- melt(clinical, id.vars = c(“sample”))
Run waterfall
pdf(file=“waterfall.pdf”,height=10,width=12)
waterfall(rt, clinDat = clinical,clinLegCol=3)
dev.off()
很简单的代码。但是这个包有一个缺点,就是变异类型必须是下面的格式,否则就会出错。
如果不是这样的变异类型该怎么办?
是不是也有R包可以这样做呢?
当然是有的,ComplexHeatmap包就是其中之一。详细的看下面的代码,可以自己定义变异类型。这里我只是简单的画一下。
library(ComplexHeatmap)
library(RColorBrewer)
data1<-read.csv(“test_1.csv”,header = T,sep=",")
data1 = as.matrix(data1)
rownames(data1) = data1[,1]
data = data1[,-1]
library(ComplexHeatmap)
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))
},
insertion = function(x, y, w, h) {
grid.rect(x, y, w-unit(0.5, “mm”), h-unit(0.5, “mm”), gp = gpar(fill = “blue”, 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 = “red”, col = NA))
},
deletion = function(x, y, w, h) {
grid.rect(x, y, w-unit(0.5, “mm”), h*0.33, gp = gpar(fill = “#008000”, col = NA))
}
)
col = c(“insertion” = “#008000”, “mutation” = “red”, “deletion” = “blue”)
oncoPrint(data, get_type = function(x) strsplit(x,";")[[1]],
alter_fun = alter_fun, col = col,
heatmap_legend_param = list(title = “Alternations”, at = c(“insertion”, “mutation”, “deletion”),
labels = c(“insertion”, “mutation”, “deletion”)))
这个包只能画到这个程度吗?似乎和GenVisR包画的差别很大,甚至没有分组信息,可以增加分组信息吗?
当然可以了,脚本如下:
library(ComplexHeatmap)
library(RColorBrewer)
data1<-read.csv(“tumor1.csv”,header = T,sep=",")
cli <- read.csv(“1.txt”,header = T,sep="\t")
data1 = as.matrix(data1)
rownames(data1) = data1[,1]
data = data1[,-1]
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))
},
Nonsense_SNV = function(x, y, w, h) {
grid.rect(x, y, w-unit(0.5, “mm”), h-unit(0.5, “mm”), gp = gpar(fill = “blue”, col = NA))
},
Fusion = function(x, y, w, h) {
grid.rect(x, y, w-unit(0.5, “mm”), h-unit(0.5, “mm”), gp = gpar(fill = “red”, col = NA))
},
Missense_SNV = function(x, y, w, h) {
grid.rect(x, y, w-unit(0.5, “mm”), h0.33, gp = gpar(fill = “#008000”, col = NA))
},
Deletion = function(x, y, w, h) {
grid.rect(x, y, w-unit(0.5, “mm”), h0.33, gp = gpar(fill = “#008000”, col = NA))
},
Inframe_Indel = function(x, y, w, h) {
grid.rect(x, y, w-unit(0.5, “mm”), h0.33, gp = gpar(fill = “#008000”, col = NA))
},
Amplication = function(x, y, w, h) {
grid.rect(x, y, w-unit(0.5, “mm”), h0.33, gp = gpar(fill = “#008000”, col = NA))
},
Splice_Site = function(x, y, w, h) {
grid.rect(x, y, w-unit(0.5, “mm”), h0.33, gp = gpar(fill = “#008000”, col = NA))
},
Frameshift_Indel = function(x, y, w, h) {
grid.rect(x, y, w-unit(0.5, “mm”), h0.33, gp = gpar(fill = “#008000”, col = NA))
}
)
col = c(“Nonsense_SNV” = “#008000”,
“Missense_SNV” = “red”,
“Fusion” = “blue”,
“Deletion”=“yellow”,
“Frameshift_Indel”=“green” ,
“Splice_Site”=“black”,
“Amplication”=“purple”,
“Inframe_Indel”="#800080")
pointsize=12,bg=“white”,res=NA,restoreConsole=TRUE)
ht_list = oncoPrint(data, alter_fun = alter_fun, col = col,
top_annotation = HeatmapAnnotation(cbar = anno_oncoprint_barplot(),
bar1 = anno_points(cli[,2]),
gender=cli[,3]))+
Heatmap(matrix(rnorm(nrow(data)*10), ncol = 10), name = “expr”, width = unit(4, “cm”))
draw(ht_list)
生活就是喜欢这两个字