簡體   English   中英

plot R 中二進制分類變量的熱圖

[英]plot a heatmap for binary categorical variables in R

我有一個 dataframe 包含許多二進制分類變量,我想為所有觀察顯示一個類似於熱圖的 plot,只顯示兩個 Z62848E3CE5804AA985513A7922FF87B 級別。 然后我想對其進行排序,以便那些在其行中具有最多“是”的觀察結果 ( ID ) 出現在頂部。

此處提供了示例數據集:

df1 <- data.frame(ID = c(1, 2, 3, 4, 5),
                   var1 = c('yes', 'yes', 'no', 'yes', 'no'),
                   var2 = c('no', 'yes', 'no', 'yes', 'no'),
                   var3 = c('yes', 'no', 'no', 'yes', 'yes'))
df1


  ID var1 var2 var3
1  1  yes   no  yes
2  2  yes  yes   no
3  3   no   no   no
4  4  yes  yes  yes
5  5   no   no  yes

我嘗試使用 heatmap heatmap() function 但我無法讓它工作。 你能幫我嗎?

如果你想使用ggplot ,你需要以長格式工作。 我將在這里使用tidyverse


library(tidyverse)
df_long <- df1 %>%
  pivot_longer(cols = paste0("var",1:3))

order <- df_long %>%
  group_by(name)%>%
  summarise(n = sum(value == "yes"))%>%
  arrange(n)%>%
  pull(name)

df_long %>%
  mutate(name = factor(name,levels = order))%>%
  ggplot(aes(ID,name,fill = value))+
  geom_tile()

在此處輸入圖像描述

order的部分是讓變量名的向量按它們的“是”數排序。 然后,您需要按照此順序設置因子變量的級別,以便讓您的熱圖按“是”的數量排序。

df_long %>%
  group_by(name)%>%
  summarise(n = sum(value == "yes"))%>%
  arrange(n)

# A tibble: 3 x 2
  name      n
  <chr> <int>
1 var2      2
2 var1      3
3 var3      3

您在heatmap的正確軌道上。 將 df 的“是”/“否”列轉換為 0 和 1 的矩陣,並禁用一些默認值,例如縮放和排序。

mat1 <- 1*(df1[,-1]=="yes")

> mat1
     var1 var2 var3
[1,]    1    0    1
[2,]    1    1    0
[3,]    0    0    0
[4,]    1    1    1
[5,]    0    0    1

# You only need this step if you want the IDs to be shown beside the plot

rownames(mat1) <- rownames(df1)

> mat1
  var1 var2 var3
1    1    0    1
2    1    1    0
3    0    0    0
4    1    1    1
5    0    0    1

# reorder the matrix by rowSums before plotting

heatmap(mat1[order(rowSums(mat1)),], scale = "none", Rowv = NA, Colv = NA)

熱圖結果

您可以通過指定col參數來更改配色方案,例如

heatmap(mat1[order(rowSums(mat1)),], scale = "none", Rowv = NA, Colv = NA, col=c("lightgrey", "tomato"))

如果您希望 plot 從左到右讀取(每個 ID 一列),只需轉置矩陣

 heatmap(t(mat1[order(rowSums(mat1)),]), scale = "none", Rowv = NA, Colv = NA)

暫無
暫無

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

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