我试图让 ggplot 生成一个带有 3 个月宽的箱的直方图。不是 90 天,而是 3 个月。就天数而言,这是一个不等宽的分箱。请注意,每隔 3 个月的刻度线可以正常工作。这是我遇到问题的 bin 宽度。这里有很多讨论,但我找不到解决方案。
这是问题的陈述。请注意,我显然可以在 ggplot 之外聚合结果,然后将它们绘制出来,也许是 ggplot 中的因素。但我一直在寻找一个全 ggplot 解决方案。
set.seed(seed=1)
dts<-as.Date('2012-01-01') + round(365*rnorm(500))
dts<-data.frame(d=dts)
g<-ggplot(dts,aes(x=d, y=..count..))
#this isnt what I want. It is 90 days, not 3 months.
#Setting binwidth=' 3 months' also doesnt work
g + geom_histogram(fill='blue',binwidth=90) +
scale_x_date(breaks = date_breaks('3 months'), #seq(as.Date('2008-1-1'), as.Date('2012-3-1'), '3 month'),
labels = date_format("%Y-%m"),
limits = c(as.Date('2010-1-1'), as.Date('2014-1-1'))) +
opts(axis.text.x = theme_text(angle=90))
#this doesnt work either.
#get: stat_bin: binwidth defaulted to range/30. Use 'binwidth = x' to adjust this.
# Error in `+.Date`(left, right) : binary + is not defined for Date objects
g + geom_bar(fill='blue') +
stat_bin(breaks=seq(as.Date('2010-1-1'), as.Date('2014-1-1'), '3 month')) +
scale_x_date(breaks = date_breaks('3 months'), #seq(as.Date('2008-1-1'), as.Date('2012-3-1'), '3 month'),
labels = date_format("%Y-%m"),
limits = c(as.Date('2010-1-1'), as.Date('2014-1-1'))) +
opts(axis.text.x = theme_text(angle=90))
也许答案是:ggplot 不会创建 3 个月宽(或 N 个月宽)的箱。