1.問題
應該是會經(jīng)常遇到這樣的熱圖挂绰,就是說它的聚類情況無法與分組信息吻合匕积。其實這個并不是錯了匆绣,是因為用于聚類的行(選出的這部分基因)的表達模式在兩組之間沒有明顯區(qū)別。
只要改變基因數(shù)量,或者換一組基因起惕,聚類樹就有可能變得和分組吻合涡贱。
假如你嘗試換了很多次還是沒有辦法讓它們變得吻合,那就取消聚類惹想。直接使用熱圖的參數(shù)cluster_cols = F即可问词。
圖就會變成:
取消了列聚類,那么熱圖列的順序就會按照矩陣列的順序排布了嘀粱。那當樣本數(shù)量多起來的時候激挪,組內(nèi)的數(shù)據(jù)規(guī)律就無法清晰的展示。
所以會需要組內(nèi)聚類這樣的操作咯锋叨。這個只能用complexheatmap來實現(xiàn)垄分,我還順便找到了注釋條加分組標簽的畫法,變得比常規(guī)熱圖好看一丟娃磺。
2.代碼如下
rm(list = ls())
library(tinyarray)
a = geo_download("GSE56649",destdir = tempdir())
a$exp = log2(a$exp+1)
find_anno(a$gpl)
## [1] "`library(hgu133plus2.db);ids <- toTable(hgu133plus2SYMBOL)` and `ids <- AnnoProbe::idmap('GPL570')` are both avaliable"
Group = factor(rep(c("control","treat"),times = c(13,9)))
Group = factor(Group,levels = c("control","treat"))
ids <- AnnoProbe::idmap('GPL570')
exp = trans_array(a$exp,ids)
g = names(tail(sort(apply(exp, 1, sd)),100))
draw_heatmap(exp[g,],Group)
這就是常規(guī)的熱圖薄湿,默認行列都會聚類
draw_heatmap(exp[g,],Group,cluster_cols = F)
cluster_cols=F控制了列不聚類。
接下來是分組聚類熱圖:
library(ComplexHeatmap)
library(circlize)
col_fun = colorRamp2(c(-2, 0, 2), c("#2fa1dd", "white", "#f87669"))
top_annotation = HeatmapAnnotation(
cluster = anno_block(gp = gpar(fill = c("#2fa1dd", "#f87669")),
labels = c("control","treat"),
labels_gp = gpar(col = "white", fontsize = 12)))
m = Heatmap(t(scale(t(exp[g,]))),name = " ",
col = col_fun,
top_annotation = top_annotation,
column_split = Group,
show_heatmap_legend = T,
border = F,
show_column_names = F,
show_row_names = F,
column_title = NULL)
m