在基因的表達模式分析中,我們往往需要對多個基因表達數據進行可視化處理,使得我們所關注的基因在不同樣本中表達情況一目了然。在日常研究中,我們往往習慣於選擇熱圖實現這一基因表達模式可視化的需求,進而直觀的表述我們的基因表達模式的分析結果。
今天就介紹一下非常簡易使用的一個繪圖包pheatmap
寫在前面,準備一個表達譜矩陣,橫軸為100個基因,縱軸為208個樣本,如下:
首先安裝pheatmap
source("http://biocoundctor.org/biocLite.R")
biocLite("pheatmap")
然後加載
library(pheatmap)
最簡單的調用如下:
pheatmap(profile)
長這個鬼樣子簡直沒法看,從右側可以看出數據跨度很大從0-200以上,圖中大部分藍色顯示其實大部分值應該是在0-50這個區間,所以我們調整策略,取log(x+1)
pheatmap(log2(profile+1))
比之前好看了點,但是還是有好多黃色,但是很明顯看得出來聚類效果比之前好多了,但是很明顯最小值太小以至於幾乎看不到藍色,顏色區分不開,進一步的來調整一下區間
bk = unique(c(seq(-5,5, length=100)))
pheatmap(log2(profile+1),breaks = bk)
此時看起來還不錯,但是這個顏色有點不舒服,換個顏色試試
bk = unique(c(seq(-5,5, length=100)))
pheatmap(log2(profile+1),breaks = bk
,color = colorRampPalette(c("navy", "white", "firebrick3"))(100))
看起來還行,但是從圖中可以看到那個中間那條一長條全是白色,事實上我想看看一個基因在不同樣本中的高低,所以我應該使用縱軸的zscore進行標準化一下
bk = unique(c(seq(-5,5, length=100)))
pheatmap(log2(profile+1),breaks = bk,scale = 'column'
,color = colorRampPalette(c("navy", "white", "firebrick3"))(100))
從圖中可以看到有些基因在不同的樣本中表達趨勢比較一致的情況了,此時縱軸樣本一團糊沒什麼意義,先把他去掉
bk = unique(c(seq(-5,5, length=100)))
pheatmap(log2(profile+1),breaks = bk,scale = 'column',show_rownames = F
,color = colorRampPalette(c("navy", "white", "firebrick3"))(100))
bk = unique(c(seq(-5,5, length=100)))
clust=pheatmap(log2(profile+1),breaks = bk,scale = 'column'
,show_rownames = F
,color = colorRampPalette(c("navy", "white", "firebrick3"))(100))
annotation_col = data.frame(
ClassGene = factor(paste0('Cluster',cutree(clust$tree_col,10)))
)
rownames(annotation_col) = colnames(profile)
pheatmap(log2(profile+1),breaks = bk,scale = 'column'
,show_rownames = F
,annotation_col = annotation_col
,color = colorRampPalette(c("navy", "white", "firebrick3"))(100))
就寫到這吧,還沒有涉及的參數:
clustering_distance_rows = "correlation"#表示行聚類使用皮爾森相關係數聚類,當然也可以自定義如drows = dist(test, method = "minkowski");clustering_distance_rows = drows
cluster_row = FALSE#表示行不聚類
legend = FALSE#表示右側圖例不顯示
display_numbers = TRUE#表示在熱圖中格子顯示對應的數字,在那種橫縱軸數目比較小是時候可用,比如樣本間相關係數聚類
number_format = "\%.1e"#當顯示數字時數字的顯示方式
cellwidth = 15, cellheight = 12#表示熱圖中小方格的寬度和高度
fontsize = 8#表示熱圖中字體顯示的大小
filename = "test.pdf"#表示直接就保存成test.pdf圖片了
labels_row#可以自己定義橫軸的顯示字符,默認上圖是基因名
main#類似title啦
gaps_col#產生一個間隔,就像有些文章中的那種分類後每個分類都有一個間隔。