R 中定性频率的热图

问题描述 投票:0回答:1

我想知道是否可以创建这样的热图。

我昨天探索了 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:)

r visualization heatmap
1个回答
0
投票

假设您很乐意将 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 版本

使用

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))
© www.soinside.com 2019 - 2024. All rights reserved.