熱圖是一種常用的數據可視化方法,它可以清晰地展示數據在不同條件下的變化情況。而pheatmap是一個R語言中用於繪製熱圖的包,它可以繪製美觀、清晰的熱圖,是數據科學家和圖形分析師的常用工具之一。本文將從以下幾個方面詳細介紹如何使用pheatmap製作高質量熱圖。
一、pheatmap的基本用法
pheatmap最基本的函數是pheatmap(),常用的參數有以下幾個:
- data:需要製作熱圖的數據,必填參數。
- scale:是否對數據進行標準化處理,可以是行、列或整張圖片。如果設為「row」,表示按行標準化;同理,設為「column」表示按列標準化。如果想將整張圖片標準化,則設為「none」。默認為「row」,即對每一行進行標準化處理。
- colorRampPalette:用於指定顏色條中使用的顏色序列。例如,colorRampPalette(c(“white”,”blue”))可以生成一個從白色到藍色的漸變色條。
- cluster_rows/cluster_cols: 是否需要進行層次聚類,可以設為「TRUE」或「FALSE」。如果設為「TRUE」,則對行/列進行層次聚類;反之則不進行層次聚類。
- 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函數內部的數據轉換函數,可以將數據處理成適合繪製熱圖的形式。常用的數據轉換函數有:
- center_scale:標準化處理。對數據進行中心化和縮放,使每個特徵的均值為0,方差為1。
- log2:對數據進行取對數操作,通常用於RNA-seq等高量表達數據的處理。
- discretize:將數據離散化。例如,可以將連續的百分比數據分為0-25%、25%-50%等多個離散化的區間。
- 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