簡體   English   中英

從數據幀制作矩陣以在 R 中制作熱圖

[英]making matrix from dataframe to make heatmap in R

我想在 R 中制作熱圖,但我無法將數據框更改為適當的矩陣形式。 我有一個包含三列(蛋白質、值和治療)的數據框,列蛋白質和治療我有一些重復。 你能幫我如何從這些數據中制作合適的矩陣,哪個包更適合制作熱圖。(我有 1000 種蛋白質(其中一些根據不同的處理重復)和 4 組處理)。 我是 R 的初學者,真的需要你的幫助。 先感謝您。

example:
protein           value    treatment

EPN1              0.986    treat1

LAMB1             0.881    treat2

PKP4              0.827    treat2     
PKP2              0.739    treat3     
BAIAP2            0.519    treat2     
UTRN              0.502    treat4     
REPS2             0.481    treat2     
PKP4              0.365    treat1      
LAMC1            -0.529    treat2     
PPIB              2.86     treat4   

你可以做這兩個

df <- read.table(header = T, text = "protein           value    treatment
EPN1              0.986    treat1
LAMB1             0.881    treat2
PKP4              0.827    treat2     
PKP2              0.739    treat3     
BAIAP2            0.519    treat2     
UTRN              0.502    treat4     
REPS2             0.481    treat2     
PKP4              0.365    treat1      
LAMC1            -0.529    treat2     
PPIB              2.86     treat4 ")

library(tidyverse)
df %>% ggplot(aes(x= treatment, y = protein, fill = value)) +
  geom_tile()


要么

library(echarts4r)

df |> 
  e_charts(protein) |> 
  e_heatmap(treatment, value) |> 
  e_visual_map(value)

在此處輸入圖片說明

這是一些示例數據。

dat <- data.frame(
    protein=replicate(100, paste(sample(LETTERS, 4), collapse="")),
    value=rnorm(100),
    treatment=paste0("treat", sample(1:4, 100, replace=TRUE)),
    stringsAsFactors=FALSE
)

使用ggplot2你可以做

library(ggplot2)
plt <- ggplot(dat, aes(treatment, protein, fill=value)) + geom_tile()

您可以在此處找到更多選項: https : //www.r-graph-gallery.com/79-levelplot-with-ggplot2.html

但是,我不知道如何處理要繪制的大量蛋白質(如您所述)。 您需要查看蛋白質的名稱嗎?

編輯:1000 種蛋白質的一種可能性是使圖表非常長,如下所示:

ggsave(
    "long.pdf", plot=plt, device="pdf", 
    width=21, height=150, units="cm", limitsize=FALSE
)

這將在當前文件夾中創建一個 PDF。 使用 PDF 查看器的縮放功能,您可以導航到感興趣的行。

編輯 2:對於更復雜的圖表,我(仍然)依賴於基礎 R。但也許有一些我不知道的 ggplot-Style 包。 基本的 R 解決方案需要首先將數據轉換為矩陣。 一種方法是使用這樣的稀疏矩陣:

dim_x <- unique(dat$protein)
dim_y <- unique(dat$treatment)
map_x <- setNames(seq_along(dim_x), dim_x)
map_y <- setNames(seq_along(dim_y), dim_y)

library(Matrix)
mat <- sparseMatrix(
    i=map_x[dat$protein], j=map_y[dat$treatment], x=dat$value, 
    dims=c(length(dim_x), length(dim_y)), dimnames=list(dim_x, dim_y)
)

然后你可以使用基本的 R heatmap函數,

heatmap(as.matrix(mat))

或一些更可定制的功能,如

library(pheatmap)
pheatmap(mat)

兩者都顯示樹狀圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM