10分類變量熱圖繪制/SCI論文/科研/研究生/生信分析熱點思路
分類變量熱圖繪制

今天小云繪制一下分類變量變量熱圖,繪制該圖需要三個輸入文件,代碼如下:
1.?安裝所需要的R包
BiocManager::install(“ComplexHeatmap”)
2.?導入需要的R包
library(ComplexHeatmap)
3.?導入數(shù)據(jù)
#差異表達分析中的logFC
logfc <- read.csv("logFc.csv", row.names = 1)

#差異分析中的P值
p.val <- read.csv("PVal.csv", row.names = 1)

#基因分組
genetype <- read.csv("genetype.csv")

3.代碼展示
#為確保熱圖基因的順序和分組文件的順序是一致的
#因此按照基因分組文件里的順序,對logfc和p.val兩個文件排序
logfcOrdered <- logfc[genetype$gene,]
p.valOrdered <- p.val[genetype$gene,]
## 對logfc進行分類
logfcCat <- apply(logfcOrdered, 2, function(x){
????cut(x, breaks = c(-Inf, -2, -1, 1, 2, Inf),
????????labels = c("< -2", "-2 - -1", "-1 - 1", "1 - 2", "> 2"))
})
rownames(logfcCat) <- rownames(logfcOrdered)
## 確保兩個數(shù)據(jù)集的列名和行名順序一致
if(!identical(rownames(logfcCat), rownames(p.valOrdered))) p.valOrdered <- p.valOrdered[rownames(logfcCat),]
if(!identical(colnames(logfcCat), colnames(p.valOrdered))) p.valOrdered <- p.valOrdered[colnames(logfcCat)]
## 把P> 0.05的數(shù)據(jù)標記為 P > 0.05
logfcCat[p.valOrdered >= 0.05] <- "P >= 0.05"
## 每個分類定義一個顏色
col_cat <- c("> 2" = "#A80C3A", "1 - 2" = "#ED5E57", "-1 - 1" = "#DDD3D2",
?????????????"-2 - -1" = "#6B9AB7", "< -2" = "#2F5B89", "P >= 0.05" = "white")
cell_fun <- function(logfc, dataP, logfcCutoff = 1, PCutoff = 0.05,
?????????????????????darkcol = "black", lightcol = "white", digit = 2, fontsize ?= 6){
????function(j, i, x, y, width, height, fill){
????????if(abs(logfc[i,j]) > logfcCutoff & dataP[i,j] < PCutoff){
????????????grid.text(round(logfc, digit)[i, j], x, y,
??????????????????????gp = gpar(fontsize = fontsize, col ?= lightcol))
????????}else{
????????????grid.text(round(logfc, digit)[i, j], x, y,
??????????????????????gp = gpar(fontsize = fontsize, col ?= darkcol))
????????}
????}
}
an_col <- c("#ED1450", "#FCCA02", "#A7CE35", "#2C92DA", "#59574A", "#FFF8AD", "#A2238E", "#BCBDBF")
names(an_col) <- unique(genetype$type)
?
## 定義注釋信息
row_an <- ?HeatmapAnnotation(type = genetype$type, ##注釋信息的內(nèi)容
?????????????????????????????show_annotation_name = F, ## 是否顯示注釋的標題
?????????????????????????????col = list(type = an_col), ## 注釋信息的顏色
?????????????????????????????show_legend = T, ?## 是否顯示注釋信息的說明
?????????????????????????????annotation_legend_param = list(title = "MMP Subtype"), ## 注釋信息圖例的標題
?????????????????????????????which = "row") #對行或者列進行注釋
pdf("rankHeatmap.pdf", width = 8, height = 4)
Heatmap(matrix = logfcCat,
????????name = "logFC", #主要圖例的標題
????????rect_gp = gpar(col = "NA", lwd = 1), #不畫邊框,或者用col = "grey"畫灰色邊框
????????col = col_cat, #熱圖顏色
????????row_names_side = "left",
????????cell_fun = cell_fun(logfcOrdered, p.valOrdered),
????????row_names_gp = gpar(fontsize = 8), #基因名字號
????????column_names_gp = gpar(fontsize = 8), #腫瘤類型字號
????????column_names_rot = 45, #腫瘤類型呈45度
????????left_annotation = row_an) #左側基因分類,如果不畫,就篩掉這個參數(shù)
dev.off()
?

最終小云繪制出了分類變量熱圖,看起來效果不錯,有需要的可以借鑒學習奧。
