如何使用pheatmap製作高質量熱圖

熱圖是一種常用的數據可視化方法,它可以清晰地展示數據在不同條件下的變化情況。而pheatmap是一個R語言中用於繪製熱圖的包,它可以繪製美觀、清晰的熱圖,是數據科學家和圖形分析師的常用工具之一。本文將從以下幾個方面詳細介紹如何使用pheatmap製作高質量熱圖。

一、pheatmap的基本用法

pheatmap最基本的函數是pheatmap(),常用的參數有以下幾個:

  1. data:需要製作熱圖的數據,必填參數。
  2. scale:是否對數據進行標準化處理,可以是行、列或整張圖片。如果設為「row」,表示按行標準化;同理,設為「column」表示按列標準化。如果想將整張圖片標準化,則設為「none」。默認為「row」,即對每一行進行標準化處理。
  3. colorRampPalette:用於指定顏色條中使用的顏色序列。例如,colorRampPalette(c(“white”,”blue”))可以生成一個從白色到藍色的漸變色條。
  4. cluster_rows/cluster_cols: 是否需要進行層次聚類,可以設為「TRUE」或「FALSE」。如果設為「TRUE」,則對行/列進行層次聚類;反之則不進行層次聚類。
  5. fontsize_row / fontsize_col:行/列標籤的字體大小,默認為12。

下面是一個pheatmap的最基本示例:

library(pheatmap)
data(mtcars)  # pheatmap自帶的一份數據集
pheatmap(mtcars)

運行以上代碼,可以得到一張基本的熱圖,如下圖所示:

二、自定義熱圖外觀

1、修改顏色條

顏色條是熱圖中的重要組成部分,可以用來展示不同數值的取值範圍。pheatmap包中可以通過colorRampPalette()函數自定義顏色條的顏色序列。例如,在默認的漸變色條中間添加白色,可以使用以下代碼:

data(mtcars)
pheatmap(mtcars, 
         colorRampPalette = c(colorRampPalette(c("navy","white")),
                              colorRampPalette(c("white","firebrick"))))

運行以上代碼,可以得到如下的熱圖:

2、修改行列標籤

通過fontsize_row和fontsize_col參數,可以控制行列標籤的字體大小。實例如下:

data(mtcars)
pheatmap(mtcars,fontsize_row = 10,fontsize_col = 8)

運行以上代碼,可以得到如下的熱圖:

可以看到,行列標籤的字體大小分別為10和8。

3、修改圖像尺寸

使用cellwidth和cellheight參數可以修改熱圖中單元格的大小,從而改變整張熱圖的大小。例如,使用以下代碼可以將熱圖的寬度和高度均設為500px:

data(mtcars)
pheatmap(mtcars, cellwidth = 20, cellheight = 20)

運行以上代碼,可以得到如下的熱圖:

三、進階用法

1、使用pheatmap函數內部的數據轉換函數

使用pheatmap函數內部的數據轉換函數,可以將數據處理成適合繪製熱圖的形式。常用的數據轉換函數有:

  1. center_scale:標準化處理。對數據進行中心化和縮放,使每個特徵的均值為0,方差為1。
  2. log2:對數據進行取對數操作,通常用於RNA-seq等高量表達數據的處理。
  3. discretize:將數據離散化。例如,可以將連續的百分比數據分為0-25%、25%-50%等多個離散化的區間。
  4. convert_to_binary:將數據轉化為二元值。例如,可以將表達量高於某個閾值的基因標記為1,其他標記為0。

下面是一個用center_scale函數對mtcars數據進行標準化的示例:

data(mtcars)
pheatmap(center_scale(mtcars))

運行以上代碼,可以得到如下的熱圖:

2、使用自定義的聚類演算法

在pheatmap中,可以使用row_cluster和col_cluster參數來控制是否進行行/列聚類,但是默認的聚類方法是基於歐幾里得距離的層次聚類。如果希望使用自定義的聚類演算法,可以使用pheatmap函數的breaks參數。

下面是一個使用kmeans排序法進行聚類的例子:

library(NbClust)  # 載入用於聚類的NbClust 包
data(mtcars)
dist_mat <- dist(mtcars)  # 生成距離矩陣
km_clust <- NbClust(mtcars, distance = "euclidean", 
             min.nc=2, max.nc=10, method="kmeans")
clust_labels <- cbind(km_clust$Best.partition)
pheatmap(mtcars,breaks = c(0,sort(clust_labels[order(clust_labels)]),nrow(mtcars)),
         cluster_rows = FALSE, cluster_cols = FALSE)

運行以上代碼,可以得到如下的熱圖:

3、使用ggplot2中的ggplot函數進一步美化熱圖

pheatmap函數繪製的熱圖已經非常美觀,但有時根據自己的需求,需要進行更多的細節控制。幸運的是,pheatmap包是基於ggplot2的,使用ggplot2的函數可以進一步美化pheatmap繪製出來的熱圖。

例如,可以使用ggplot2中的scale_fill_gradient()函數控制顏色條中使用的顏色序列:

library(ggplot2)
data(mtcars)
mat <- center_scale(mtcars)  # 數據標準化處理
df = as.data.frame(mat)  # 將數據轉換為數據框形式,方便使用ggplot2函數
ggplot(df,aes(x = Col,y = Row,fill = Value)) + 
  geom_tile() + 
  scale_fill_gradient(low = "white", high = "steelblue")

運行以上代碼,可以得到如下的熱圖:

結語

pheatmap是一款功能強大、易於使用的熱圖製作工具,它可以繪製出美觀、清晰的熱圖。通過本文所述的基本用法、自定義熱圖外觀的方法以及進階用法,相信大家已經了解了pheatmap的基本操作,可以根據自己的需求進行深入的研究和使用。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/240188.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:20
下一篇 2024-12-12 12:20

相關推薦

  • 如何使用Python獲取某一行

    您可能經常會遇到需要處理文本文件數據的情況,在這種情況下,我們需要從文本文件中獲取特定一行的數據並對其進行處理。Python提供了許多方法來讀取和處理文本文件中的數據,而在本文中,…

    編程 2025-04-29
  • 如何使用jumpserver調用遠程桌面

    本文將介紹如何使用jumpserver實現遠程桌面功能 一、安裝jumpserver 首先我們需要安裝並配置jumpserver。 $ wget -O /etc/yum.repos…

    編程 2025-04-29
  • 如何使用Python讀取CSV數據

    在數據分析、數據挖掘和機器學習等領域,CSV文件是一種非常常見的文件格式。Python作為一種廣泛使用的編程語言,也提供了方便易用的CSV讀取庫。本文將介紹如何使用Python讀取…

    編程 2025-04-29
  • Hibernate註解聯合主鍵 如何使用

    解答:Hibernate的註解方式可以用來定義聯合主鍵,使用@Embeddable和@EmbeddedId註解。 一、@Embeddable和@EmbeddedId註解 在Hibe…

    編程 2025-04-29
  • 如何使用HTML修改layui內部樣式影響全局

    如果您想要使用layui來構建一個美觀的網站或應用,您可能需要使用一些自定義CSS來修改layui內部組件的樣式。然而,修改layui組件的樣式可能會對整個頁面產生影響,甚至可能破…

    編程 2025-04-29
  • 如何使用random生成不重複的隨機數

    在編程開發中,我們經常需要使用隨機數來模擬一些場景或生成一些數據。但是如果隨機數重複,就會造成數據的不準確性。這時我們就需要使用random庫來生成不重複且隨機的數值。下面將從幾個…

    編程 2025-04-29
  • 如何使用GPU加速運行Python程序——以CSDN為中心

    GPU的強大性能是眾所周知的。而隨著深度學習和機器學習的發展,越來越多的Python開發者將GPU應用於深度學習模型的訓練過程中,提高了模型訓練效率。在本文中,我們將介紹如何使用G…

    編程 2025-04-29
  • 如何使用Python導入Random庫

    Python是一門優秀的編程語言,它擁有豐富的第三方庫和模塊。其中,Random庫可謂是最常用的庫之一,它提供了用於生成隨機數的功能。對於開發人員而言,使用Random庫能夠提高開…

    編程 2025-04-29
  • 理解agentmain方法如何使用

    如果你不清楚如何使用agentmain方法,那麼這篇文章將會為你提供全面的指導。 一、什麼是agentmain方法 在Java SE 5.0中,Java提供了一個機制,允許程序員在…

    編程 2025-04-29
  • 如何使用Python將print輸出到界面?

    在Python中,print是最常用的調試技巧之一。在編寫代碼時,您可能需要在屏幕上輸出一些值、字元串或結果,以便您可以更好地理解並調試代碼。因此,在Python中將print輸出…

    編程 2025-04-29

發表回復

登錄後才能評論