劉小澤寫于2020.5.15
相信你看到這個問題秦忿,可能感覺很簡單,不就一個參數(shù)的問題嗎赠堵?
下面來看探索(全程是基于pheatmap來做的)
首先構(gòu)建一個測試數(shù)據(jù)
library(pheatmap)
test = matrix(rnorm(200), 20, 10)
test[1:10, seq(1, 10, 2)] = test[1:10, seq(1, 10, 2)] + 3
test[11:20, seq(2, 10, 2)] = test[11:20, seq(2, 10, 2)] + 2
test[15:20, seq(2, 10, 2)] = test[15:20, seq(2, 10, 2)] + 4
colnames(test) = paste("Test", 1:10, sep = "")
rownames(test) = paste("Gene", 1:20, sep = "")
# 20行(基因)小渊,10列(樣本)的一個表達矩陣
> test[1:4,1:4]
Test1 Test2 Test3 Test4
Gene1 0.6807237 -0.860925078 1.855526 -0.4521751
Gene2 3.9723180 -0.002143337 3.571518 -0.9309492
Gene3 2.8913975 -0.055238202 3.505305 -0.2134826
Gene4 4.6034459 -0.420745550 4.334734 -0.9265620
然后最簡單的熱圖是
p1=pheatmap(test)
p1
最簡單的熱圖
現(xiàn)在看到违寞,這里的樣本预烙、基因都進行了聚類,將表達相似的排在了靠近的位置蜈缤,可以讓整個圖更美觀
但有時候揍愁,受限于排版的版面大小以及不關(guān)心基因之間的聚類關(guān)系呐萨,不想要聚類樹,但是還是想要上面這種已經(jīng)排好的位置關(guān)系
如果簡單調(diào)整參數(shù)
如果只是簡單設(shè)置莽囤,那么最后的樣子也會改變
pheatmap(test,cluster_rows = F,cluster_cols = F)
只是簡單設(shè)置谬擦,最后的樣子會改變
達不到第一張圖的效果,基因名和樣本名的位置對不起來
情急之下朽缎,可能會手動調(diào)整基因名和樣本名的位置惨远。但畢竟不是有效之舉谜悟,下次再遇到依舊是個難題...
其實一個小技巧就能拯救
我們?yōu)榱撕竺娣奖惚4妫?jīng)常會把圖片保存為一個變量北秽,然后直接運行這個變量就會打印圖片葡幸;保存這個變量就會另存為不同類型的圖片
但是,保存的這個變量不單單是個字母(比如上面的p1
)贺氓,它還暗藏信息
p1
默認是對行和列都進行聚類的蔚叨,因此我們可以從p1
中提取到聚類后的行、列結(jié)果辙培,而不用手動去挑【重點就是下面兩行代碼】
gn=rownames(test)[p1$tree_row[["order"]]]
sn=colnames(test)[p1$tree_col[["order"]]]
> gn
[1] "Gene16" "Gene19" "Gene15" "Gene18" "Gene17" "Gene20" "Gene5" "Gene2" "Gene4" "Gene7" "Gene10" "Gene8"
[13] "Gene3" "Gene9" "Gene1" "Gene6" "Gene13" "Gene14" "Gene11" "Gene12"
> sn
[1] "Test6" "Test10" "Test2" "Test4" "Test8" "Test1" "Test3" "Test5" "Test7" "Test9"
稍微看一下蔑水,是不是和第一張圖的名稱是對應(yīng)的呢
然后如果這時我們再畫圖呢?
# 按照挑出來的基因和樣本號進行重排序
new_test=test[gn,sn]
pheatmap(new_test,cluster_rows = F,cluster_cols = F)
最后兩張就一樣了
歡迎關(guān)注我們的公眾號~_~
我們是兩個農(nóng)轉(zhuǎn)生信的小碩扬蕊,打造生信星球搀别,想讓它成為一個不拽術(shù)語、通俗易懂的生信知識平臺尾抑。需要幫助或提出意見請后臺留言或發(fā)送郵件到jieandze1314@gmail.com
Welcome to our bioinfoplanet!