ggplot如何在x轴上绘制多个变量

时间:2020-03-20 12:28:49

标签: r ggplot2

我在用0和1编码的多个变量中有多次曝光。那些不是彼此排斥的。我想将每个图形放在gg条形图中的x轴上并排放置,但是我很挣扎。

sex <- rbinom(1000, 1, .5)
expo_1 <- rbinom(1000, 1, .05)
expo_2 <- rbinom(1000, 1, .1)
expo_3 <- rbinom(1000, 1, .15)
expo_4 <- rbinom(1000, 1, .2)
DF <- data.frame(sex, expo_1, expo_2, expo_3, expo_4)

DF$sex <- as.factor(DF$sex)

首先,我考虑将它们合并到一个新的变量中作为类别变量,而每次曝光都将其合并为一个新的水平,但是我认为现在这毫无意义,并引入了错误。

DF$expo_sum <- 0
DF$expo_sum[DF$expo_1 == 1] <-  1
DF$expo_sum[DF$expo_2 == 1] <-  2
DF$expo_sum[DF$expo_3 == 1] <-  3
DF$expo_sum[DF$expo_4 == 1] <-  4

这种方式行不通。

这是我想要的:

ggplot(DF, aes(x = expo_1, fill = sex))+
  geom_bar(position = "dodge")

,但在同一轴上也具有expo_2,expo_3和expo_4。就像“ x = c(expo_1,expo_2,expo_3和expo_4)”一样,为什么这不是ggplot中的有效代码!

有人知道怎么做吗?预先感谢!

1 个答案:

答案 0 :(得分:3)

我认为这是您想要的(肯定很难知道)...通常,当您有多个宽形式的变量时,您必须将其重塑为长形式,因为ggplot更喜欢这样做。

library(tidyr)
library(dplyr)

DF %>%
  pivot_longer(cols=-sex, names_to="expo") %>%
  group_by(sex, expo) %>%
  summarise(value=sum(value)) %>%
  ggplot(aes(x = expo, y=value, fill = sex)) +
  geom_bar(position = "dodge", stat="identity")

enter image description here