在 R 中创建动态热图

Create a dynamic heatmap in R

我想创建一段代码,允许我根据 df 中的值创建热图。 但是,这些值并不总是出现(即某些数据集包含 4 类、一些 3 和一些 2)。

例如一个 df 可能是这样的:

column <- c(rep(c(1),5),rep(c(2),5),rep(c(3),5),rep(c(4),5),rep(c(5),5))
row <- rep(1:5, 5)
class <- c(0,0,1,2,1,2,2,3,0,1,2,3,1,2,0,1,0,0,2,3,3,2,2,2,1)
df <- data.frame(column, row, class)
df

而另一个会有相同的行数,但只有 类 0、1 和 3(例如)。

我想用以下逻辑给各个网格着色:

class 0 = red
class 1 = green
class 2 = blue
class 3 = grey

我希望能够通过热图代码传递不同的数据集,而不必更改任何内容即可获得所需的结果。

注意:数据的行数始终相同,热图的大小也始终相同。

使用 ggplot 您可以使用 class 的值和您想要的颜色创建一个命名向量,然后使用 scale_fill_manual.

library(ggplot2)
set.seed(123)
column <- c(rep(c(1),5),rep(c(2),5),rep(c(3),5),rep(c(4),5),rep(c(5),5))
row <- rep(1:5, 5)
class <- c(0,0,1,2,1,2,2,3,0,1,2,3,1,2,0,1,0,0,2,3,3,2,2,2,1)
df <- data.frame(column, row, class)


cols <- c('0' = 'red', '1' = 'green', '2' = 'blue', '3' = 'grey')
ggplot(df, aes(column, row, fill= factor(class))) + 
  geom_tile()+
  scale_fill_manual(values = cols)