ggplot2道奇重叠 - 保留每个元素的宽度

Ali*_*Deg 6 r ggplot2

希望它很容易理解.它与此处的示例基本相同.

在此输入图像描述

运用

ggplot(mtcars, aes(factor(cyl), fill = factor(vs))) +
   geom_bar(position = position_dodge(preserve = "single"))
Run Code Online (Sandbox Code Playgroud)

但是我得到Error in position_dodge(preserve = "single") : unused argument (preserve = "single")/.ggplot2版本2.2.1

那么如何修改代码

ggplot(mtcars, aes(factor(cyl), fill = factor(vs))) +
     geom_bar(position = "dodge")
Run Code Online (Sandbox Code Playgroud)

不要像下面那样得到这个超宽的酒吧. 在此输入图像描述

Rol*_*and 4

这一论点是在一月份的position_dodge开发版本中添加的。尚未在 CRAN 上发布。

解决方法是在 ggplot2 之外计算统计数据:

ggplot(as.data.frame(with(mtcars, table(cyl = factor(cyl), vs = factor(vs)))), 
       aes(factor(cyl), y = Freq, fill = factor(vs))) +
  geom_col(position = "dodge") + 
  scale_fill_discrete(drop = FALSE)
Run Code Online (Sandbox Code Playgroud)

结果图

这是有效的,因为零计数包含在传递给 geom 的数据中。