如何在 R 或 ggplot 中创建此图表

How to create this chart in R or ggplot

下面是创建数据框的代码。

df <- data.frame (ID  = c('C1', 'C2', 'C3', 'C4', 'C5', 'C6', 'C7', 'C8', 'C9','C10', 'C11', 'C12','C13', 'C14'),
                  A = c(1, 1, 2, 2, 2, 1, 1, 1, 2, 1, 1, 2, 2, 2), 
                  B = c(3, 3, 1, 1, 1, 1, 1, 2, 3, 3, 2, 2, 2, 2)
                  )

创建类别列的代码:

df$Cat <- ifelse(df$A == 2 & df$B == 2, 'MID',
                 ifelse(df$A == 2 & df$B == 1, 'GONE', 
                        ifelse(df$A == 1 & df$B == 1, 'GONE', 
                               ifelse(df$A == 1 & df$B == 2, 'GONE', 
                                      ifelse(df$A == 2 |df$A == 1 & df$B == 3, 'UP',
                               
                               'NO')))))

我需要创建的图表:

如何根据以上数据创建我想要的图表?我已经尝试为此使用 Treemaps,但我认为这不会起作用,因为它只允许在固定 space 中按大小比较数量。那么可以用什么?任何帮助将不胜感激

你需要的是geom_raster.

为了按照您的问题标记图块,我将创建一个名为 df_annotate 的额外数据框,其中包含该数据框中指定的所有 aes。在这种情况下,您可以控制标签在图表上的显示位置(只需根据需要设置不同的 AB 值)。

这里我设置了AB的值,让标签出现在和你画的相似的位置。记得在 geom_text().

中使用 data = df_annotate

geom_text

准备 df_annotate
library(tidyverse)

df_annotate <- df %>% group_by(Cat) %>% 
  summarize(sum_Cat = n()) %>% 
  mutate(sum_Cat_number = paste(sum_Cat, Cat), 
         A = c(1, 2, 1.5), 
         B = c(2, 2, 3))

ggplot

df %>% 
  ggplot(aes(B, A, fill = Cat)) + 
  geom_raster() +
  ylim(c(0.5, 3)) +
  geom_text(data = df_annotate, aes(B, A, label = sum_Cat_number), inherit.aes = F)

使用 geom_tile()

尝试使用 ggplot2 绘制热图
ggplot(df, aes(A, B, fill= Cat)) + 
  geom_tile() +
  scale_fill_manual(values = c("blue", "green", "red")) +
  geom_text(aes(label = Cat), size=5)