保留组合条形图中缺失列的位置

Preserve location of missing columns in combined bar plot

一个非常常见的发布问题是在 ggplot 中缺少列时保留条形宽度(例如 1, 2。除了此修复之外,我还需要保留条形图的相对位置缺少条形图(即间隙应该在条形图所在的位置)。

ggplot(mtcars, aes(factor(cyl), fill = factor(gear))) +
  geom_bar(position = position_dodge(preserve = "single"))

您会注意到在 8 个气缸组(最右边)中缺少一个绿色列(齿轮 = 4)。 preserve="single" 已更正宽度,但蓝色条(齿轮=5)已向左移动以填充空白。

我该如何防止这种情况发生?我希望在绿色的地方有一个空隙。

感谢您的帮助。

我们根据'cyl'、'gear'得到频率count,用complete扩展数据得到所有的组合,同时fill将 'n' 列计数为 0(默认情况下,complete 中未提及的所有列都会在缺少组合的情况下获得 NA),然后使用 ggplot

进行绘图
library(dplyr)
library(tidyr)
library(ggplot2)
mtcars %>%
   count(cyl, gear) %>%
   complete(cyl = unique(cyl), gear = unique(gear), 
         fill = list(n = 0)) %>%
   ggplot(aes(factor(cyl), n, fill = factor(gear))) + 
        geom_bar(stat = 'identity', position = 'dodge')