繁体   English   中英

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)。 我已经找到了答案,在使用facet_wrap时,geom_bar中的条具有不想要的不同宽度,但是在我的示例中我无法使它起作用。 有人能解决我的问题吗? 显然,我的原始数据集要大得多,并且与上面的示例相比,不同的条形宽度问题经常发生。

您可以通过为每个疾病+周+年用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轴位置获得一些小条-我认为这可以帮助您清楚每个条都有一个空格,但是您会引入可能会混淆的假值:

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

这是正常的:在x轴上,每个单位在轴上都有相同的空间(此处为1周)。

在有些星期中,只有2015年,只有2016年,或者没有,或者两者都有。 如果是两年,则星期单位与只有一年的星期单位相同。 因此,当有两个年份要绘制时,“单位空间”将分成两部分,因此条形会小两倍。

这样,“问题”就不在facet_wrap上了,而是由于position =“ dodge”而使条形并排放置。

科林

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM