来自R中定性频率的热图

vdzxcuhz  于 2023-09-27  发布在  其他
关注(0)|答案(1)|浏览(111)

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

我昨天探索了一段时间的热图(),甚至无法创建热图,更不用说像这样的样式了,所以我从头开始。不过,我还得再做些...有没有人有办法创造这样的东西?我的数据只是每个问题的答案(以数字形式,所以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:)

8hhllhi2

8hhllhi21#

假设你很乐意用0替换NA,比如:(使用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()ggplot()版本的起点:

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))

相关问题