你可以在ggplot2中的指标变量上面对吗?

时间:2017-02-25 21:39:56

标签: r ggplot2

types = c("A", "B", "C")
df = data.frame(n = rnorm(100), type=sample(types, 100, replace = TRUE))
ggplot(data=df, aes(n)) + geom_histogram() + facet_grid(~type)

以上是我通常使用的方法。但我可以使用它而不是分类变量我有一组作为指标变量的列,如:

df = data.frame(n = rnorm(100), A=rbinom(100, 1, .5), B=rbinom(100, 1, .5), C=rbinom(100, 1, .5))

现在" Type"我之前的例子中的变量并不是互斥的。观察可以是" A和B"或" A和B以及C"例如。但是,对于任何存在A,B或C的观察,我仍然喜欢单独的直方图?

2 个答案:

答案 0 :(得分:2)

我会使用tidyr重新整形数据,以便复制多个类别中的数据。 filter删除不需要的案例。

df <- data.frame(
  n = rnorm(100),
  A = rbinom(100, 1, .5),
  B = rbinom(100, 1, .5),
  C = rbinom(100, 1, .5)
)

library("tidyr")
library("dplyr")
library("ggplot2")

df %>% gather(key = "type", value = "value", -n) %>%
  filter(value == 1) %>%
  ggplot(aes(x = n)) +
    geom_histogram() +
    facet_wrap(~type)

答案 1 :(得分:1)

我一直鄙视gather,所以我会为data.table粉丝添加另一种方法和方法。

library(data.table)
DT <- melt(setDT(df), id= "n", variable = "type")[value > 0]
ggplot(DT,aes(n)) + geom_histogram() + facet_grid(~type)

#tidyland
library(reshape2)
library(dplyr)
library(ggplot2)
df %>% 
  melt(id = "n", variable = "type") %>% 
  filter(value > 0) %>% 
  ggplot(aes(n)) + geom_histogram() + facet_grid(~type)