2017-04-26 32 views
1

我在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 

其中批次可以是任何A,B,G,R,S,和其他列(AE)是所有布爾/邏輯值的。

我能夠創建如下進行計數列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") 

同樣,我可以輕鬆地創建爲其它列4個更多圖表(A,C,D,E)。

但是,是否有可能將這5個圖合併在一個圖中?換句話說,我想要一個圖表,其中有5個組(如上圖)中的'Batch'的5個值,並且在每個組中我需要一個單獨的欄和5列中的每一欄(AE)。這是可行的嗎?

更新:這是我一直在尋找(創建使用從@mtoto的建議後) enter image description here

+2

閱讀關於「重塑寬長」和位置=閃避 – zx8754

回答

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") 
+0

感謝您的快速和漂亮的答案。我建議你編輯數據框名稱以使其與問題中的數據框名稱一致(它應該是'mdf',而不是'df')。 – Nearchos