用R包中heatmap畫熱圖
一:導入R包及需要畫熱圖的數據
library(pheatmap)
data<- read.table("F:/R練習/R測試數據/heatmapdata.txt",head = T,row.names=1,sep="\t")
二:畫圖
1)pheatmap(data)#默認參數
2)pheatmap(data,clustering_distance_rows = "correlation")#聚類線長度優化
3)pheatmap(data,scale="column")#按列均一化,"row","column" or "none"默認是"none"
4)pheatmap(data,scale="row")#按行均一化,"row","column" or "none"默認是"none"
5)pheatmap(data,display_numbers=T,number_format="%.2f",number_color="red",fontsize_number=8)#是否在每一格上顯示數據,及其數據格式,大小及其顏色
6)pheatmap(data,cellwidth = 50,cellheight= 14)#格子大小
7) pheatmap(data,main="sbheatmap")#標題
8)pheatmap(data,color = colorRampPalette(c("MediumBlue","white","red"))(256))#顏色
9)pheatmap(data,clustering_distance_rows = "correlation",scale="column",display_numbers=T,number_format="%.1f",number_color="black",
fontsize_number=8,cellwidth = 14,cellheight= 14,color = colorRampPalette(c("MediumBlue","white","red"))(256))
一、熱圖工具的參數與原理 (1)關於均一化的方法原理: 熱圖的核心思想是:使用漸變的顏色來代表數值的變化,以便其更加直觀。使用RNA-seq的表達量數據繪制熱圖,最大的問題是不同基因的表達量差異過於巨大。例如:基因A的平均表達量是10,000(所有樣本的表達量都在5,000~15,000),而基因B的平均表達量是100(所有樣本的表達量都在50~500間波動)。那麽問題來了,因為它們數值差異過大,根本不在一個數量級上,那麽就很難在一張熱圖中使用合理的顏色標尺來反映兩個基因在不同樣本的表達量變化。 例如在下圖中,橫坐標代表樣本,縱坐標代表基因。由於第一個基因的表達量非常高(相對其他基因),如果表達量不做任何處理,圖中只顯示這個基因表達量極高(紅色),其他基因的表達量較低(黃色)。但到底第一個基因在不同樣本間的表達量是如何變化了,就無法顯示了。
圖3 略醜陋的雙列熱圖
原因是當每行只有兩個數值的時候,任何兩個不同的數值標準正態均一化後,都會變成-1和1。所以,會產生上述的圖形(只有兩種顏色)。面對這種類型的數據,建議直接計算每行兩個數值的倍數的log2值,然後使用OS-tools畫單列的熱圖。
當然, 單列熱圖也可以使用R語言的pheatmap包繪制,並通過一個函數控制0點的位置,在另一個R語言繪圖的主題帖中也有介紹。
(3)聚類的原理
工具中的其他參數還包括: 顏色選擇:選擇繪制熱圖的色系。考慮到綠紅的色系,對紅綠色盲來說區分有些困難,某些雜誌不接受綠紅色系。建議用戶使用藍紅燈其他漸變色系; 字體大小:當熱圖樣本、基因數太多的時候,可以通過減少字體大小來保證正常顯示; 格子高、寬:主要為了美觀而調整; 格子上是否顯示數字:是否將表達量的數值寫在格子中,就看用戶自己選擇了。 畫出格子邊界:如果相鄰的格子顏色相似,可以通過畫出邊界來提高區分度。在格子數較少的時候,建議畫出格子邊界會更加美觀。
用R包中heatmap畫熱圖