1. 程式人生 > >pheatmap繪製“熱圖”,你需要的都在這

pheatmap繪製“熱圖”,你需要的都在這

熱圖可以聚合大量的資料,並可以用一種漸進色來優雅地表現,可以很直觀地展現資料的疏密程度或頻率高低。

    本文利用R語言 pheatmap 包從頭開始繪製各種漂亮的熱圖。引數像積木,拼湊出你最喜歡的熱圖即可,如下圖:

     基因和樣本都可以單獨聚類,排序,聚類再分組,行列註釋,配色調整,調整聚類線以及單元格的寬度和高度均可實現。

 

載入資料,R包

 

#R包library(pheatmap)# 構建測試資料 set.seed(1234)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 = "")head(test[,1:6])

繪製熱圖

 

繪製預設熱圖

 

pheatmap(test)

 

基本引數

# scale = "row"引數對行進行歸一化
# clustering_method引數設定不同聚類方法,預設為"complete",可以設定為'ward', 'ward.D', 'ward.D2', 'single', 'complete', 'average', 'mcquitty', 'median' or 'centroid'

pheatmap(test,scale = "row", clustering_method = "average")

 

 

#表示行聚類使用皮爾森相關係數聚類,預設為歐氏距離"euclidean"

pheatmap(test, scale = "row", clustering_distance_rows = "correlation")

 

 

#行 列是否聚類,cluster_row ,cluster_col

pheatmap(test, cluster_row = FALSE,cluster_col = TRUE)

 

 

# treeheight_row和treeheight_col引數設定行和列聚類樹的高度,預設為50

pheatmap(test, treeheight_row = 30, treeheight_col = 50)

 

 

# 設定cell 的大小

 

pheatmap(test, cellwidth = 15, cellheight = 12, fontsize = 10)

 

設定 text

 

熱圖中展示數值

# display_numbers = TRUE引數設定在每個熱圖格子中顯示相應的數值,#number_color引數設定數值字型的顏色

pheatmap(test, display_numbers = TRUE,number_color = "blue")

 

 

# 設定數值的顯示格式

pheatmap(test, display_numbers = TRUE, number_format = "%.1e")

 

 

#設定條件式展示

pheatmap(test, display_numbers = matrix(ifelse(test > 5, "*", ""), nrow(test)))

 

 

設定 legend 

 

設定legend展示的值
#legend_breaks引數設定圖例顯示範圍,legend_labels引數新增圖例標籤

pheatmap(test, cluster_row = FALSE, legend_breaks = -1:4, legend_labels = c("0", "1e-4", "1e-3", "1e-2", "1e-1", "1"))

 

#去掉legend

pheatmap(test, legend = FALSE)

 

設定 color

自定義顏色

#colorRampPalette 

pheatmap(test, color = colorRampPalette(c("navy", "white", "firebrick3"))(50))

 


# border_color引數設定每個熱圖格子的邊框色

# border=TRIUE/FALSE引數是否要邊框線

 

pheatmap(test, border_color = "red", border=TRUE)

 

設定 annotations

# 生成行 列的註釋

annotation_col = data.frame( CellType = factor(rep(c("CT1", "CT2"), 5)), Time = 1:5 )rownames(annotation_col) = paste("Test", 1:10, sep = "")annotation_row = data.frame( GeneClass = factor(rep(c("Path1", "Path2", "Path3"), c(10, 4, 6))))rownames(annotation_row) = paste("Gene", 1:20, sep = "")

 

#新增列的註釋

pheatmap(test, annotation_col = annotation_col)

 

 

#新增行 列的註釋

#angle_col 改變列標籤的角度

 

pheatmap(test, annotation_col = annotation_col, annotation_row = annotation_row, angle_col = "45")

 

 

# 根據聚類結果,自定義註釋分組及顏色

ann_colors = list( Time = c("white", "firebrick"), CellType = c(CT1 = "#1B9E77", CT2 = "#D95F02"), GeneClass = c(Path1 = "#7570B3", Path2 = "#E7298A", Path3 = "#66A61E") )pheatmap(test, annotation_col = annotation_col,annotation_row=annotation_row, annotation_colors = ann_colors, main = "Title")

 

設定 gap


#根據聚類結果,設定行gap
pheatmap(test, annotation_col = annotation_col, cluster_rows = FALSE, gaps_row = c(10, 14))

#根據聚類結果,設定列gap

pheatmap(test,annotation_col = annotation_col, cluster_rows = FALSE,cutree_col = 2)


#展示行或者列的label
labels_row = c("", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Il10", "Il15", "Il1b")
pheatmap(test, annotation_col = annotation_col, labels_row = labels_row)

熱圖彙總

pheatmap(test, annotation_col = annotation_col, annotation_row = annotation_row, annotation_colors = ann_colors,gaps_row = c(10, 14),cutree_col = 2,main = "Pheatmap")

 

輸出結果

 

A = pheatmap(test, annotation_col = annotation_col, annotation_row = annotation_row, annotation_colors = ann_colors,gaps_row = c(10, 14),cutree_col = 2,main = "Pheatmap") #記錄熱圖的行排序
order_row = A$tree_row$order #記錄熱圖的列排序order_col = A$tree_col$order # 按照熱圖的順序,重新排原始資料result = data.frame(test[order_row,order_col]) # 將行名加到表格資料中result = data.frame(rownames(result),result,check.names =F)  colnames(result)[1] = "geneid" #result結果按照熱圖中的順序write.table(result,file="reorder.txt",row.names=FALSE,quote = FALSE,sep='\t')  

 

R的當前工作目錄下即可檢視熱圖的結果。

 

【公眾號對話方塊,回覆 R熱圖 即可獲得上述熱圖R程式碼】

 

更多關於生信,R,Python的內容請掃碼關注小號,謝謝。

相關推薦

pheatmap繪製需要

熱圖可以聚合大量的資料,並可以用一種漸進色來優雅地表現,可以很直觀地展現資料的疏密程度或頻率高低。     本文利用R語言 pheatmap 包從頭開始繪製各種漂亮的熱圖。引數像積木,拼湊出你最喜歡的熱圖即可,如下圖:   &

來自開發者技術前線 高級程序員需要養成7個習慣

等等 網絡七層協議 有意 數據 爆發 程序員開發 提高 程序解耦 功能 要有負責心 在我們的每日工作中,有一半以上時間是在解決各種Bug。高級程序員在面對這些Bug時會從多個維度思考,Bug出現的時間、系統環境、硬件版本以及軟件版本等等。接著修復問題,嚴格自測,上線後觀察,

關於SQL Server 2017需要知道5個重點

SQL Server 2017增加了一些最新的資料服務和分析功能,包括強大的AI功能、對R和Python的支援。 當技術主管為公司定義其分析策略時,大多數人認為AI、機器學習、自然語言處理和資料探勘是這些計劃的關鍵組成部分。在過去幾年中,許多分析功能很受歡迎,但它們仍然是複雜、昂貴,並且有一些特殊

從計算機視覺的小白變為大神需要經歷七個階段

如果想要機器能夠進行思考,我們需要先教會它們去看。  李飛飛——Director of Stanford AI Lab and Stanford Vision Lab 計算機視覺(Computer vision)是一門研究如何使機器“看”的科學,更進一步的說,就

大資料入門需要四個常識

一、大資料分析的五個基本方面   1、視覺化分析   大資料分析的使用者有大資料分析專家,同時還有普通使用者,但是他們二者對於大資料分析最基本的要求就是視覺化分析,因為視覺化分析能夠直觀的呈現大資料特點,同時能夠非常容易被讀者所接受,就如同看圖說話一樣簡單明瞭。   2、

科普想成為厲害的 Java 後端程式設計師需要 13 個知識點

老讀者就請肆無忌憚地點贊吧,微信搜尋【沉默王二】關注這個在九朝古都洛陽苟且偷生的程式設計師。本文 GitHub github.com/itwanger 已收錄,裡面還有我精心為你準備的一線大廠面試題。 站在運籌帷幄的角度來看,一名厲害的 Java 後端程式設計師都需要懂得哪些知識呢?我想,這也是很多讀

Java架構工程師知識知道麽?

alt 自己的 講解 自己 工程 個人 OS 技術工 學習 1.工程化專題 (團隊大於3個人之後,你需要去考慮團隊合作,科學管理) 2.源碼分析專題 (好的程序員,一行代碼一個設計就能看出來,源碼分析帶你品味代碼,感受架構) 大家可以點擊加入群:697579751【JA

Docker容器部署與管理入門培訓需要的前期準備裏!

Rancher 在線培訓 Docker入門 容器技術憑借其輕量化和快速部署的特性,被越來越多企業開發者贊譽,近兩年來發展態勢可謂炙手可熱。去年一年,Kubernetes的流行度持續快速上升,我們有理由相信在不遠的未來,Kubernetes將成為通用的基礎設施標準。開源的全棧化企業級容器管理平臺Ra

在討論當下測試怎麼拿月薪15k需要掌握哪些?

  最近在論壇上看到的是,都在討論當下測試怎麼拿月薪15k,你需要掌握哪些?我覺得測試想要月薪15k並不難,只要做到我說的這幾點肯定是可以的! 克服懶惰 我覺得,越是聰明的人越是覺得自己“懶惰”。大家可能會好奇,你說反了吧,越是聰明的人越是勤奮吧? 其實勤奮和覺得自己

R語言繪製——pheatmap

(網易雲課堂,騰訊課堂生物資訊講師,高階生物資訊工程師) pheatmap簡介: Pretty Heatmaps——Implementation of heatmaps that offers mor

Java架構工程師知識知道麼?

1.工程化專題 (團隊大於3個人之後,你需要去考慮團隊合作,科學管理) 2.原始碼分析專題 (好的程式設計師,一行程式碼一個設計就能看出來,原始碼分析帶你品味程式碼,感受架構) 大家可以點選加入群:697579751【JAVA大牛學習交流】 裡

互聯網營銷新機遇需要更專業的APP在線制作平臺

講解 精準 選擇 重新 進行 專註 增量 好的 營銷 移動互聯網的快速發展日新月異,如今手機APP是各行業企業的營銷利器,但是目前應用市場上的APP同質化嚴重,有個性和特色的APP太少。那麽如何定制開發一款個性化APP應用軟件呢,制作一份好的APP策劃方案尤其重要。那麽一份

國家網絡安全事件應急預案需要知道哪些重點

nbsp 規範化 值班 重要 單位 承擔 行為 本地 健全 本月27日,Petya勒索病毒在歐洲爆發,這是自五月Wanncry勒索病毒之後發生的第二起跨國界的大型網絡安全問題,網絡安全事件的規模和頻率在逐漸上升。而面對逐漸嚴峻的形式,中央網信辦在6月27號向社會印發了《國家

什麽時候需要暫停項目

項目能夠順利執行下去,是每個項目管理者都想要看到的結果。但是,有時候暫停項目,是項目團隊無可奈何的選擇。在很多情況下,適當暫停,是為了更好的開始。那麽,什麽時候,你需要暫停項目呢? 下面四種跡象就需要暫停項目: 1.累積的重大問題沒有解決途徑。 通常,我們在項目進行過程中,能

想成為一個優秀的硬件工程師需要具備這些能力!

發展趨勢 時序圖 做到 硬件 sig 利用 討論 單片機 加固 一個好的硬件工程師實際上就是一個項目經理,你需要從外界交流獲取對自己設計的需求,然後匯總,分析成具體的硬件實現。還要跟眾多的芯片和方案供應商聯系,從中挑選出合適的方案,當原理圖完成後,你需要組織同事來進行配合評

人工智能創業需要知道的 6 大核心問題

黑色素 營銷 來看 轉化 類別 ast 既然 系統 原來 第一個問題:互聯網 vs 人工智能 首先如果今天大家選擇創業,我建議更應該關註人工智能,而非互聯網。為什麽這麽講? 1. 互聯網的流量紅利已經消失; 最新最熱的IT技術付費社區 IT幫 itbang.me,你發帖提問

(*)(轉)要快速學習SSM框架需要一套學習曲線平滑的教程

lan 都是 spring 學習方式 能夠 分享圖片 個人能力 很多 data 作者:meepo鏈接:https://www.zhihu.com/question/57719761/answer/156952139來源:知乎著作權歸作者所有。商業轉載請聯系作者獲得授權,非商

關於驗證碼需要了解這些

使用場景 strong 兼容 logs nbsp 簽名 業務 swe yun (一)什麽是驗證碼業務id? captchaId, 驗證碼唯一標識,公開可見,用於區分不同的驗證碼使用場景,如登錄、投票、發帖等。可在易盾管理中心驗證碼業務ID管理處自行創建。2017年6月1

微服務架構盛行的時代需要了解點 Spring Boot

措辭 理由 直接 響應 con 可伸縮 角度 徹底 構建 隨著互聯網的高速發展,龐大的用戶群體和快速的需求變化已經成為了傳統架構的痛點。 在這種情況下,如何從系統架構的角度出發,構建出靈活、易擴展的系統來快速響應需求的變化,同時,隨著用戶量的增加,如何保證系統的穩定性、高可

【廣州服務器回收】服務器維護過程中需要了解的5個小常識

windows ron 就是 圖片 渲染 天都 驚人的 領域 其他人 大多數人認為,服務器僅僅是升級後的臺式機。但任何在數據中心工作過的人都知道,它們的差別挺大的。 盡管web服務器每天都要承擔數百萬訪問者的負載,但對於普通用戶來說,它們仍然神秘莫測。以下是關於服務器你可能