簡體   English   中英

R 中的熱圖與原始值

[英]Heatmap in R with raw values

我有這個 dataframe:

df <- data.frame(PatientID = c("3454","345","5","348","567","79"),
                 clas1 = c(1, 0, 5, NA, NA, 4),
                 clas2 = c(4, 1, 0, 3, 1, 0),
                 clas3 = c(1, NA, 0, 5, 5, 5), stringsAsFactors = F)

我想創建一個熱圖,x 軸為患者 ID,y 軸為 clas1、clas2 和 clas3。 熱量 map 中表示的值將是每個“類”的原始值。 在這里我貼一張我想要的圖

在此處輸入圖像描述

很抱歉,因為我沒有更多可用的顏色來表示這一點,但這只是一個示例,可以使用任何色標。 重要的是,我想區分零和 NA,因此理想情況下,NA 有自己的顏色或顯示為白色(空)。

我希望這是可以理解的。

但任何問題都可以問

非常感謝!

df <- data.frame(PatientID = c("3454","345","5","348","567","79"),
                 clas1 = c(1, 0, 5, NA, NA, 4),
                 clas2 = c(4, 1, 0, 3, 1, 0),
                 clas3 = c(1, NA, 0, 5, 5, 5), stringsAsFactors = F)
library(tidyverse)
df %>% pivot_longer(!PatientID) %>%
  ggplot(aes(x= PatientID, y = name, fill = value)) +
  geom_tile()

代表 package (v2.0.0) 於 2021 年 5 月 25 日創建

這是帶有“熱圖”的基本 R 選項

heatmap(t(`row.names<-`(as.matrix(df[-1]), df$PatientID)))

# Which is like
# x <- as.matrix(df[-1]
# row.names(x) <- df$PatientID
# heatmap(t(x))

在此處輸入圖像描述

這是另一種選擇:

在此處輸入圖像描述

df <- data.frame(PatientID = c("3454","345","5","348","567","79"),
                 clas1 = c(1, 0, 5, NA, NA, 4),
                 clas2 = c(4, 1, 0, 3, 1, 0),
                 clas3 = c(1, NA, 0, 5, 5, 5), stringsAsFactors = F)


# named vector for heatmap
cols <-  c("0" = "white",
           "1" = "green", 
           "2" = "orange", 
           "3" = "yellow", 
           "4" = "pink",
           "5" = "black",
           "99" = "grey")
labels_legend <- c("0" = "0",
                   "1" = "1", 
                   "2" = "2", 
                   "3" = "3", 
                   "4" = "4", 
                   "5" = "5",
                   "99" = "NA")

df1 <- df %>% 
  pivot_longer(
    cols = starts_with("clas"),
    names_to = "names",
    values_to = "values"
  ) %>% 
  mutate(PatientID = factor(PatientID, levels = c("3454", "345", "5", "348", "567", "79")))

ggplot(
  df1, 
  aes(factor(PatientID),  factor(names))) +
  geom_tile(aes(fill= factor(values))) +
  # geom_text(aes(label = values), size = 5, color = "black") + # text in tiles
  scale_fill_manual(
    values = cols, 
    breaks = c("0", "1", "2", "3", "4", "5", "99"),
    labels = labels_legend,
    aesthetics = c("colour", "fill"),
    drop = FALSE
  ) +
  scale_y_discrete(limits=rev) +
  coord_equal() +
  theme(line = element_blank(),
        title = element_blank()) +
  theme(legend.direction = "horizontal", legend.position = "bottom")

准備數據

我將提供 4 個選項,在所有四個選項中,您需要分配行名並刪除 id 列。 IE:

df <- data.frame(PatientID = c("3454","345","5","348","567","79"),
                 clas1 = c(1, 0, 5, NA, NA, 4),
                 clas2 = c(4, 1, 0, 3, 1, 0),
                 clas3 = c(1, NA, 0, 5, 5, 5), stringsAsFactors = F)
rownames(df) <- df$PatientID
df$PatientID <- NULL
df

output 是:

> df
     clas1 clas2 clas3
3454     1     4     1
345      0     1    NA
5        5     0     0
348     NA     3     5
567     NA     1     5
79       4     0     5

底座 R

使用底座 R(體面的輸出):

heatmap(as.matrix(df))

在此處輸入圖像描述

gplots

使用 gplots(有點難看,但要控制更多參數):

library(gplots)
heatmap.2(as.matrix(df))

在此處輸入圖像描述

熱圖

使用 heatmaply,您可以為樹狀圖使用更好的默認值(它還以更“最佳”的方式組織它們)。

您可以在此處了解有關 package 的更多信息。

Static

Static 熱圖與熱圖(更好的默認值,恕我直言)

library(heatmaply)
ggheatmap(df)

在此處輸入圖像描述

現在有彩色樹狀圖

library(heatmaply)
ggheatmap(df, k_row = 3, k_col = 2)

在此處輸入圖像描述

沒有樹狀圖:

library(heatmaply)
ggheatmap(df, dendrogram = F)

在此處輸入圖像描述

交互的

帶有 heatmaply 的交互式熱圖(懸停工具提示和縮放功能 - 它是交互式的:):

library(heatmaply)
heatmaply(df)

您可以使用 static ggheatmap 進行任何操作,也可以使用交互式熱圖版本進行操作。

在此處輸入圖像描述

暫無
暫無

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

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