我有纵向分类数据,我想将其可视化为类似热图的图形(参见heatmap-like plot,但对于分类变量)。
研究分为三个分组级别:研究参与者、访问会话和日历回忆日记。每次访问的主要类别是根据日历数据建立的。例如,参与者可能在 30 天中的第 28 天记录了 A 类,在 30 天的第 2 天记录了 B 类;他们将在访问级别主要被归类为 A 类)。
偶尔,日历数据会出现联系。我希望热图能够反映这些关系。
这里有一些示例数据可以使用:
dat <- data.frame(person=factor(paste0("id#", 1:5),
levels =rev(paste0("id#", 1:5))),
matrix(sample(LETTERS[1:3], 15, T), ncol = 3))
dat <- dat %>% mutate(X2 = case_when(person=="id#3" ~ "A;B;C", TRUE ~ X2))
我希望我的热图能够反映类似于 excel 输出的示例:
library(tidyverse)
dat %>%
pivot_longer(-person) %>%
mutate(val = 1/(str_count(value, ";")+1),
var = str_split(value, ";")) %>%
unnest(var) %>%
group_by(person, name, var) %>%
summarise(val = sum(val)) %>%
mutate(name = as.factor(name),
var = as.factor(var)) %>%
ggplot(.) +
geom_bar(aes(person, val, fill = var), stat = "identity") +
facet_grid(rows = ~name) +
coord_flip() +
theme(rect = element_blank(),
axis.text.x = element_blank(),
axis.title.x = element_blank(),
axis.title.y = element_blank(),
line = element_blank(),
panel.spacing = unit(-1, "lines"))