0

我试图“捕捉”一个酒吧内的一些点。这些点代表 36 个值,为期 3 年。条形代表相同 3 年中每年的 3 个值。

如果您运行代码,您会看到第一年​​的某个点可能被第二年的柱子捕获,而第三年的点数正在“用完”最后一个柱子。

如何对齐条和点?

library(ggplot2)

set.seed(1)
df.year <- data.frame(yeardate = seq(as.Date("2010-01-01"), by = "year", length.out = 3), datevalue = abs(rnorm(3)))
df.month <- data.frame(monthdate = seq(as.Date("2010-01-01"), by = "month", length.out = 36), datevalue = abs(rnorm(36)))
df.month$inyear <- format(df.month$monthdate, "%Y") 

df.month
p <- ggplot()
p <- p +    geom_point(
            data = df.month
            ,aes(x = monthdate, y = datevalue, color=inyear)
        )
p <- p +    geom_bar(
            data = df.year
            ,aes(x = yeardate, y = datevalue)
            ,alpha=0.7 
            ,stat = "identity"
        )           
p + scale_x_date(labels = date_format("%Y"), breaks = date_breaks("years"))
4

1 回答 1

1

geom_bar将条形图集中在给定的日期上。由于给定的日期是一年的第一天,它以一年的第一天为中心,因此 2012 年的大部分时间都在以 2012-01-01 为中心的条形之外(而该条的大部分位于 2011 年)。因此,要么在年中将条形居中:

df.year <- data.frame(yeardate = seq(as.Date("2010-07-01"), 
                                     by = "year", 
                                     length.out = 3), 
                      datevalue = abs(rnorm(3)))

这使 在此处输入图像描述

或绘制具有您希望它们的确切范围的矩形

df.year <- data.frame(yearstart = seq(as.Date("2010-01-01"), 
                                      by = "year", length.out = 3),
                      yearend = seq(as.Date("2010-12-31"), 
                                    by = "year", length.out = 3),
                      datevalue = abs(rnorm(3)))

并将geom_bar呼叫替换为

p <- p +    geom_rect(
            data = df.year
            ,aes(xmin = yearstart, xmax = yearend,
                 ymin = 0, ymax = datevalue)
            ,alpha=0.7
        )           

给予

在此处输入图像描述

于 2013-09-26T20:43:41.763 回答