我昨天探索了 heatmap() 一段时间,甚至无法创建热图,更不用说像这样的样式了,所以我从头开始制作。但是,我必须做更多...有人有解决方案来创建这样的东西吗? 我的数据只是每个问题的答案(以数字形式,所以 Never = 1,oncexweek = 2 等),看起来像这样(所有列都是数字):
Q1 Q2 Q3 Q4
1 3 1 3 3
2 5 5 5 5
3 NA 1 NA NA
5 3 3 5 5
7 5 1 3 5
8 5 4 3 4
10 1 5 1 1
11 2 1 2 1
13 3 2 3 2
14 3 NA 5 NA
15 3 3 1 1...etc
......................................
我非常感谢这里的任何想法。此外,我根据分箱直方图任意确定了颜色的中断...有什么更好的方法来做到这一点@statpeeps:)
假设您很乐意将 NA 替换为 0,例如: (使用 tidyverse 函数和基本 R
heatmap()
)
df |> pivot_longer(cols = everything(),
names_to = "Question",
values_to = "Answer") |>
count(Question, Answer) |>
pivot_wider(names_from = Question,
values_from = n) |>
column_to_rownames("Answer") |>
as.matrix() |> t() |>
heatmap()
给出了一个基本的:
此处有关更改外观/标签等以适应需要的信息:
https://r-graph-gallery.com/215-the-heatmap-function.html
使用
ggplot()
的 geom_tile()
版本的起点:
df |> pivot_longer(cols = everything(),
names_to = "Question",
values_to = "Answer") |>
count(Question, Answer) |>
ggplot(data = _, aes(x = Answer, y = Question, fill = n)) +
geom_tile() + # heatmap
geom_text(aes(label = n)) + # add the counts to each tile
scale_x_continuous(breaks = 0:5,
labels = c("Skipped","Never / almost never",
"Once per week",
"2-3 times per week",
"Once per day",
"Multiple times per day")) # relabel x axis
set.seed(12345)
df <- data.frame(Q1 = sample(0:5, 20, TRUE),
Q2 = sample(0:5, 20, TRUE),
Q3 = sample(0:5, 20, TRUE),
Q4 = sample(0:5, 20, TRUE))