geom_bar中的条形宽度不相等

Joe*_*p_S 1 r ggplot2 geom-bar

对于以下数据框架,我想使用几个条形图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))
Run Code Online (Sandbox Code Playgroud)

我使用以下语法给出了几个条形图.

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")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

Mar*_*ius 5

您可以通过填写每个疾病+周+年的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")
Run Code Online (Sandbox Code Playgroud)

您也可以尝试使用0.1这样的小数字填充,这样您就可以在每个x轴位置获得一些小条形图 - 我认为这有助于明确每个条形图都有一个空间,但是您引入了可能令人困惑的虚假值:

df2 = df %>%
    complete(Disease, Week, Year, fill = list(Number = 0.1))
Run Code Online (Sandbox Code Playgroud)