将值绘制为未堆积的条形图

时间:2020-07-16 18:03:02

标签: r ggplot2 plot graph

我正在尝试在R中绘制以下玩具数据帧,特别是B和C列中的True-True,False-True,True-False和False-False组合。这些True和False值也对应于2条件(“ X”或“ Y”)。

A       B       C
X       True    True
Y       False   True
X       False   False
Y       True    True
Y       True    False
...     ...     ...

但是,我当前的代码(如下)将这些条件按条件分为2组。当前代码还只为我提供了False-False,False-True和True-True组合。不知何故,我就错了。

我想将4种组合绘制为条件X的4条未堆叠的条和条件Y的另外4条未堆叠的条。有人对此有何建议?

ggplot(data, aes(x = A, fill = interaction(B,C))) + 
  geom_bar(position = 'stack', stat="count")

1 个答案:

答案 0 :(得分:1)

尝试geom_bar(position="dodge2"),他们应该并排布置。

A <- c("X", "Y", "X", "Y", "Y", "X", "X", "Y", "Y")
B <- c(T, F, F, T, T, T, F, F, T)
C <- c(T, T, F, T, F, F, F, T, F)

df <- data.frame(cbind(A, B, C))

df %>% ggplot(aes(x=A, fill=interaction(B,C))) + 
  geom_bar(position = "dodge2", stat="count")

我添加了更多数据点,以便您可以看到不同的计数。

示例图:

example figure

如果您想显示缺少的类别(例如,不包含interaction(B,C)组合的类别),则可以使用以下内容:

A <- factor(c("X", "Y", "X", "Y", "Y", "X", "X", "Y", "Y"), levels=c("X", "Y"))
B <- factor(c(T, F, F, T, T, T, F, F, T), levels=c("FALSE", "TRUE"))
C <- factor(c(T, T, F, T, F, F, F, T, F), levels=c("FALSE", "TRUE"))

df <- data.frame(A, B, C)

df %>% group_by(A, B, C, .drop=F) %>% tally() %>% 
  ggplot(aes(x=A, y=n, fill=interaction(B,C), color=interaction(B,C))) + 
  geom_bar(position = "dodge2", stat="identity")

示例图:

enter image description here