如何在 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
。在这种情况下,您可以控制标签在图表上的显示位置(只需根据需要设置不同的 A
和 B
值)。
这里我设置了A
和B
的值,让标签出现在和你画的相似的位置。记得在 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)
下面是创建数据框的代码。
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
。在这种情况下,您可以控制标签在图表上的显示位置(只需根据需要设置不同的 A
和 B
值)。
这里我设置了A
和B
的值,让标签出现在和你画的相似的位置。记得在 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)