ggplot和pivot_longer在多个因素上

时间:2020-03-23 12:47:57

标签: r ggplot2 tidyr

我想使数据框更长,所以我可以根据它作图。我有一个要根据其分类的二分变量(性别)。我有四次曝光作为因素。

  DF <- data.frame(sex = rbinom(1000, 1, .5),
                                expo_1 = rbinom(1000, 1:4, .15),
                                expo_2 = rbinom(1000, 1:4, .25),
                                expo_3 = rbinom(1000, 1:4, .3),
                                expo_4 = rbinom(1000, 1:4, .45))                                                   
  DF$sex <- as.factor(sex)
  DF$expo_1 <- as.factor(expo_1)
  DF$expo_2 <- as.factor(expo_2)
  DF$expo_3 <- as.factor(expo_3)
  DF$expo_4 <- as.factor(expo_4)

据我所知。我正在努力为博览会的每个层次进行计数。

DF %>%
  pivot_longer(cols = -sex, names_to = "expo") %>%
  group_by(sex, expo) 

我想要这样的东西:

enter image description here

非常感谢您的帮助,并在此先感谢您!

1 个答案:

答案 0 :(得分:2)

您快到了-使用构面和geom_bar来计算value的原始计数,以填充美学。默认为堆叠位置。

提示:使用mutate_all可简化类型转换

library(tidyverse)
DF <- data.frame(sex = rbinom(1000, 1, .5),
                 expo_1 = rbinom(1000, 1:4, .15),
                 expo_2 = rbinom(1000, 1:4, .25),
                 expo_3 = rbinom(1000, 1:4, .3),
                 expo_4 = rbinom(1000, 1:4, .45))   

DF <- DF %>% mutate_all(as.factor)

df_long <- DF %>%
  pivot_longer(cols = -sex, names_to = "expo")

ggplot(df_long) + geom_bar(aes(x = expo, fill = value)) +facet_grid(~sex)

reprex package(v0.3.0)于2020-03-23创建