按组计算真/假值的条形图(躲闪图)

时间:2017-04-26 12:23:57

标签: r graph ggplot2 bar-chart

我是R和ggplot的新人。而且我不确定我想要的是否可行。

以下是我的数据的一部分:

> mdf
   Batch     A     B     C     D     E
1      G FALSE  TRUE FALSE  TRUE FALSE
2      G FALSE FALSE FALSE  TRUE FALSE
3      G FALSE  TRUE FALSE FALSE FALSE
4      G FALSE FALSE FALSE  TRUE FALSE
5      G FALSE FALSE  TRUE  TRUE  TRUE
6      G FALSE FALSE  TRUE  TRUE  TRUE
7      G FALSE FALSE FALSE FALSE  TRUE
8      G FALSE FALSE  TRUE  TRUE  TRUE
9      G FALSE FALSE FALSE  TRUE FALSE
10     G FALSE FALSE FALSE  TRUE  TRUE
11     G FALSE FALSE FALSE FALSE  TRUE
12     G FALSE FALSE FALSE  TRUE FALSE
13     G FALSE FALSE FALSE  TRUE FALSE
14     G FALSE FALSE FALSE  TRUE FALSE
15     G FALSE FALSE FALSE  TRUE FALSE
16     G FALSE FALSE FALSE  TRUE FALSE
17     G FALSE FALSE  TRUE  TRUE FALSE
18     G FALSE FALSE  TRUE  TRUE  TRUE
19     A FALSE FALSE FALSE  TRUE  TRUE
20     A FALSE FALSE FALSE  TRUE  TRUE

其中Batch可以是A,B,G,R,S中的任何一个,其他列(A-E)都是布尔值/逻辑值。

我能够创建一个图表来计算B列中的TRUE值,如下所示: enter image description here

使用:

ggplot(data = mdf, aes(x = Batch, y = as.numeric(B), fill = Batch))
    + stat_summary(fun.y = sum, geom = "bar")

同样,我可以轻松地为其他列(A,C,D,E)再创建4个图形。

但是,是否可以将这5个图表“合并”在一个图表中?换句话说,我想要一个图表,其中我将有5个组(如上图所示)的5个“批处理”值,并且在每个组中我需要一个单独的栏,其中包含5列中的每一列的计数(AE)。这可行吗?

更新:这是我正在寻找的(使用@mtoto建议后创建) enter image description here

1 个答案:

答案 0 :(得分:3)

是的,您只需要先重塑数据,然后使用position = "dodge"为每个key绘制一个条形图。使用tidyr

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

mdf %>% gather(key, value, -Batch) %>%
  ggplot(.,(aes(Batch, as.numeric(value), fill = key))) +
  stat_summary(fun.y = sum, geom = "bar", position = "dodge")