带有多个布尔列的ggplot facet

时间:2017-10-11 09:30:54

标签: r ggplot2 boolean subset

我有一个数据框,其中包含日期列,值列和大约6个布尔列:

date        value         x1    x0    x2    x3 ....
01/1999     2000          TRUE  FALSE TRUE  FALSE
02/1999     5000          FALSE TRUE  FALSE FALSE
02/1999     6000          FALSE TRUE  FALSE TRUE
03/1999     5000          TRUE  FALSE FALSE TRUE

现在我想绘制每列x1,x0 ......的每个日期条目的计数: 我可以通过对数据帧进行子集化并每次调用ggplot来轻松实现这一点:

ggplot(subset, aes(date)) + geom_bar()

但是我想知道是否有办法用facet生成单个图,其中6个子图各自针对x1,x2,x3 = TRUE进行过滤

1 个答案:

答案 0 :(得分:1)

听起来您可能希望将数据框从宽格式转换为长格式,并将所有布尔列聚集到一个列中。例如:

library(dplyr)
library(tidyr)

df %>%
  gather(subset.variable, logic, -date, -value) %>%
  filter(logic) %>%
  ggplot(aes(date, value)) +
  geom_point() +                # using geom_point for illustration
  facet_wrap(~subset.variable)

plot

使用的样本数据:

set.seed(123)
n = 200
df <- data.frame(
  date = seq.Date(from = as.Date("1999-01-01"),
                  to = as.Date("1999-01-01") + n - 1,
                  by = 1),
  value = rpois(n, lambda = 2),
  x1 = sample(c(TRUE, FALSE), n, replace = T),
  x2 = sample(c(TRUE, FALSE), n, replace = T),
  x3 = sample(c(TRUE, FALSE), n, replace = T),
  x4 = sample(c(TRUE, FALSE), n, replace = T),
  x5 = sample(c(TRUE, FALSE), n, replace = T),
  x6 = sample(c(TRUE, FALSE), n, replace = T)
)

> head(df)
        date value    x1    x2    x3    x4    x5    x6
1 1999-01-01     1  TRUE FALSE  TRUE  TRUE  TRUE FALSE
2 1999-01-02     3 FALSE  TRUE FALSE  TRUE FALSE FALSE
3 1999-01-03     2 FALSE FALSE  TRUE  TRUE  TRUE  TRUE
4 1999-01-04     4 FALSE FALSE  TRUE  TRUE FALSE FALSE
5 1999-01-05     4  TRUE  TRUE  TRUE  TRUE FALSE  TRUE
6 1999-01-06     0 FALSE  TRUE FALSE FALSE  TRUE FALSE