geom_bar 中的条形宽度不等

Bars in geom_bar are not of equal width

对于以下数据框,我想使用 ggplot 制作多个条形图。

df <- data.frame(Disease = c("Disease1","Disease2","Disease3","Disease3","Disease3","Disease4","Disease5","Disease5","Disease6","Disease4","Disease2","Disease2","Disease1","Disease7","Disease1","Disease1","Disease7","Disease6","Disease3","Disease6"),
                   Week = c(3,52,46,47,19,39,42,46,44,45,46,42,45,48,44,44,43,42,45,47),
                   Year = c(2015,2015,2015,2016,2015,2015,2016,2016,2015,2015,2015,2015,2016,2016,2016,2015,2016,2016,2016,2015),
                   Number = c(1,1,6,5,1,1,4,12,4,15,6,15,6,11,4,2,9,1,4,1))

我使用以下语法,它给出了几个条形图。

ggplot(df, aes(factor(Week), Number )) + 
  geom_bar(stat="identity" , aes(fill = factor(Year)), position = "dodge") + 
  facet_wrap(~ Disease, ncol = 2, scales = "free_y") +
  labs(x = "Week", y = "Number") +
  scale_fill_discrete(name = "Year")

但是,我希望所有条形具有相同的宽度(宽度差异参见疾病 1)。我已经在这里 找到了答案,但我无法在我的示例中使用它。有人能解决我的问题吗? 显然,我的原始数据集比我上面的例子要大得多,并且不同条宽的问题出现得更频繁。

这很正常:在 x 轴上,每个单位在轴上具有相同的 space(此处为 1 周)。

有些星期只有 2015 年,只有 2016 年,none,或两者都有。当有两个年份时,周单位与只有一年时相同。因此,当要绘制两个年份时,"space for a unit" 被分成两部分,因此条形图小两倍。

然后 "problem" 不在 facet_wrap 上,但由于位置 = "dodge",这使条形并排。

科林

您可以通过为每种疾病 + 周 + 年填写 0 来解决此问题:

library(tidyverse)
df2 = df %>%
    complete(Disease, Week, Year, fill = list(Number = 0))

ggplot(df2, aes(factor(Week), Number )) + 
    geom_bar(stat="identity" , aes(fill = factor(Year)), position = "dodge") + 
    facet_wrap(~ Disease, ncol = 2, scales = "free_y") +
    labs(x = "Week", y = "Number") +
    scale_fill_discrete(name = "Year")

您也可以尝试填充一个像 0.1 这样的小数字,这样您就可以在每个 x 轴位置得到一些小条形图 - 我认为这可以帮助弄清楚每个条形图都有一个 space,但是您引入了可能令人困惑的假值:

df2 = df %>%
    complete(Disease, Week, Year, fill = list(Number = 0.1))