【发布时间】:2023-03-29 05:41:01
【问题描述】:
如果在下面的时间序列示例中丢失数据,有没有办法为geom_bar() 设置恒定宽度?我试过在aes() 中设置width,但没有成功。比较代码示例下方图中 2011 年 5 月到 2011 年 6 月的条形宽度。
colours <- c("#FF0000", "#33CC33", "#CCCCCC", "#FFA500", "#000000" )
iris$Month <- rep(seq(from=as.Date("2011-01-01"), to=as.Date("2011-10-01"), by="month"), 15)
colours <- c("#FF0000", "#33CC33", "#CCCCCC", "#FFA500", "#000000" )
iris$Month <- rep(seq(from=as.Date("2011-01-01"), to=as.Date("2011-10-01"), by="month"), 15)
d<-aggregate(iris$Sepal.Length, by=list(iris$Month, iris$Species), sum)
d$quota<-seq(from=2000, to=60000, by=2000)
colnames(d) <- c("Month", "Species", "Sepal.Width", "Quota")
d$Sepal.Width<-d$Sepal.Width * 1000
g1 <- ggplot(data=d, aes(x=Month, y=Quota, color="Quota")) + geom_line(size=1)
g1 + geom_bar(data=d[c(-1:-5),], aes(x=Month, y=Sepal.Width, width=10, group=Species, fill=Species), stat="identity", position="dodge") + scale_fill_manual(values=colours)
【问题讨论】:
-
有一个类似的问题here 但是它只处理无法处理宽度参数的
stats。position='dodge'似乎也有同样的失败。有更多ggplot知识的人可能想参与进来,但这听起来像是一个潜在的错误。 -
我也遇到过这个问题。很高兴知道。现在,我将使用下面发布的解决方法,用 NA 填充值。
-
在他对github.com/tidyverse/ggplot2/issues/1776 的回复中,哈德利说:这就是躲避的工作原理。您可能想尝试分面。顺便说一句,这个问题已经在 SO:here 和 here 上多次解决,例如
-
因为当我们搜索
geom_bar +width +fixed时,google往往会把我们带到这里,所以我想指出这个鲜为人知的技巧:geom_bar(position = position_dodge(preserve = "single")) -
ggplot 中有一个new dodging algorihm。当前版本(2.2.1 Nov-2017)尚未包含它。