简体   繁体   中英

Sort cells of heatmap

I created the following dataframe:

n <- 100
df <- data.frame(
Q1 = sample(c(0,1), n, rep = TRUE),
Q2 = sample(c(0,1), n, rep = TRUE),
Q3 = sample(c(0,1), n, rep = TRUE),
Q4 = sample(c(0,1), n, rep = TRUE),
Q5 = sample(c(0,1), n, rep = TRUE),
Q6 = sample(c(0,1), n, rep = TRUE),
Q7 = sample(c(0,1), n, rep = TRUE),
Q8 = sample(c(0,1), n, rep = TRUE),
Q9 = sample(c(0,1), n, rep = TRUE),
Q10 = sample(c(0,1), n, rep = TRUE))

Which resulted in:

         Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10
  [1,]  0  0  1  0  0  0  0  0  0   0
  [2,]  1  0  0  0  0  0  0  0  0   0
  [3,]  0  0  1  0  0  0  0  0  0   0
  [4,]  0  0  0  1  0  0  0  0  0   0
  [5,]  0  0  0  0  0  0  0  0  0   0
  [6,]  0  1  0  0  0  0  0  0  0   0
  [7,]  0  0  0  1  0  0  0  0  0   0
  [8,]  1  0  0  0  0  0  0  0  0   0
  [9,]  0  0  0  0  0  0  0  0  0   0
 [10,]  1  0  0  0  0  0  0  0  0   0
 [11,]  0  0  0  0  0  0  0  0  0   0
 [12,]  0  0  0  0  0  0  0  0  0   0
 [13,]  0  0  1  0  0  0  0  0  0   0
 [14,]  0  0  0  0  0  0  0  0  0   0
 [15,]  0  0  0  0  0  0  0  0  0   0
 [16,]  0  0  1  0  0  0  0  0  0   0
 [17,]  0  0  0  0  0  0  0  0  0   0
 [18,]  0  0  1  0  0  0  0  0  0   0
 [19,]  0  0  1  0  0  0  0  0  0   0
 [20,]  0  1  0  0  0  0  0  0  0   0
 [21,]  0  0  0  1  0  0  0  0  0   0
 [22,]  0  0  0  1  0  0  0  0  0   0
 [23,]  0  0  0  0  0  0  0  0  0   0
 [24,]  1  0  0  0  0  0  0  0  0   0
 [25,]  0  1  0  0  0  0  0  0  0   0
 [26,]  1  0  0  0  0  0  0  0  0   0
 [27,]  0  0  0  0  0  0  0  0  0   0
 [28,]  0  0  1  0  0  0  0  0  0   0
 [29,]  0  1  0  0  0  0  0  0  0   0
 [30,]  1  0  0  0  0  0  0  0  0   0
 [31,]  1  0  0  0  0  0  0  0  0   0
 [32,]  0  1  0  0  0  0  0  0  0   0
 [33,]  0  0  0  1  0  0  0  0  0   0
 [34,]  0  0  0  0  0  0  0  0  0   0
 [35,]  0  0  1  0  0  0  0  0  0   0
 [36,]  0  0  1  0  0  0  0  0  0   0
 [37,]  0  0  0  0  0  0  0  0  0   0
 [38,]  0  1  0  0  0  0  0  0  0   0
 [39,]  0  0  0  1  0  0  0  0  0   0
 [40,]  0  1  0  0  0  0  0  0  0   0
 [41,]  0  1  0  0  0  0  0  0  0   0
 [42,]  0  0  0  0  0  0  0  0  0   0
 [43,]  1  0  0  0  0  0  0  0  0   0
 [44,]  0  0  0  1  0  0  0  0  0   0
 [45,]  0  0  0  0  0  0  0  0  0   0
 [46,]  0  0  1  0  0  0  0  0  0   0
 [47,]  1  0  0  0  0  0  0  0  0   0
 [48,]  0  0  0  1  0  0  0  0  0   0
 [49,]  1  0  0  0  0  0  0  0  0   0
 [50,]  0  0  1  0  0  0  0  0  0   0
 [51,]  0  1  0  0  0  0  0  0  0   0
 [52,]  0  1  0  0  0  0  0  0  0   0
 [53,]  0  0  0  0  0  0  0  0  0   0
 [54,]  0  0  1  0  0  0  0  0  0   0
 [55,]  0  0  1  0  0  0  0  0  0   0
 [56,]  0  0  1  0  0  0  0  0  0   0
 [57,]  0  0  0  1  0  0  0  0  0   0
 [58,]  0  0  0  0  0  0  0  0  0   0
 [59,]  0  0  0  0  0  0  0  0  0   0
 [60,]  0  0  0  1  0  0  0  0  0   0
 [61,]  0  0  0  0  0  0  0  0  0   0
 [62,]  0  1  0  0  0  0  0  0  0   0
 [63,]  0  0  0  0  0  0  0  0  0   0
 [64,]  1  0  0  0  0  0  0  0  0   0
 [65,]  0  0  0  0  0  0  0  0  0   0
 [66,]  0  1  0  0  0  0  0  0  0   0
 [67,]  0  1  0  0  0  0  0  0  0   0
 [68,]  1  0  0  0  0  0  0  0  0   0
 [69,]  0  1  0  0  0  0  0  0  0   0
 [70,]  0  0  0  0  0  0  0  0  0   0
 [71,]  0  1  0  0  0  0  0  0  0   0
 [72,]  1  0  0  0  0  0  0  0  0   0
 [73,]  0  1  0  0  0  0  0  0  0   0
 [74,]  0  0  0  0  0  0  0  0  0   0
 [75,]  0  1  0  0  0  0  0  0  0   0
 [76,]  0  0  0  0  0  0  0  0  0   0
 [77,]  0  0  0  0  0  0  0  0  0   0
 [78,]  0  0  0  0  0  0  0  0  0   0
 [79,]  0  0  0  0  0  0  0  0  0   0
 [80,]  0  0  0  0  0  0  0  0  0   0
 [81,]  0  0  0  1  0  0  0  0  0   0
 [82,]  1  0  0  0  0  0  0  0  0   0
 [83,]  0  0  0  0  0  0  0  0  0   0
 [84,]  0  0  0  1  0  0  0  0  0   0
 [85,]  0  0  1  0  0  0  0  0  0   0
 [86,]  0  0  1  0  0  0  0  0  0   0
 [87,]  0  0  0  1  0  0  0  0  0   0
 [88,]  0  0  0  0  0  0  0  0  0   0
 [89,]  0  1  0  0  0  0  0  0  0   0
 [90,]  0  0  1  0  0  0  0  0  0   0
 [91,]  0  0  0  0  0  0  0  0  0   0
 [92,]  0  1  0  0  0  0  0  0  0   0
 [93,]  0  0  0  0  0  0  0  0  0   0
 [94,]  0  1  0  0  0  0  0  0  0   0
 [95,]  0  1  0  0  0  0  0  0  0   0
 [96,]  0  0  0  0  0  0  0  0  0   0
 [97,]  1  0  0  0  0  0  0  0  0   0
 [98,]  0  0  0  0  0  0  0  0  0   0
 [99,]  0  0  1  0  0  0  0  0  0   0
[100,]  0  1  0  0  0  0  0  0  0   0

I'd like to create a heatmap in which the 1s are shaded (code below). I want to add a feature that allows me to color entire rows in the map. For instance, I'd like rows 1-50 to be blue and 50-100 to be red. Is there anyway to incorporate this in the code?

heatmap(df, Colv = NA, Rowv = NA, scale="column")

Thanks in advance!!

It that okay for you to use ggplot ?

library(tidyverse)
library(reshape)

rows_1 <- 1:50
rows_2 <- 51:100

dat1 <- reshape::melt(df) %>%
  mutate(y = rep(1:100, 10)) %>%
  `colnames<-`(c("x", "value", "y")) %>%
  mutate(value = as.factor(value),
         fill2 = ifelse(y %in% rows_1, "red",
                        ifelse(y %in% rows_2, "blue", NA)))

cols <- c("1" = "black", "0" = "white", "red" = "red", "blue" = "blue")

ggplot(dat1, aes(x, y)) +
  geom_tile(aes(fill = value)) +
  geom_tile(aes(fill = fill2), alpha = 0.3) +
  scale_fill_manual(values = cols)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM