对齐不同的时间序列

时间:2013-09-26 13:13:08

标签: r ggplot2

我试图“捕捉”一个栏内的一些点。 这些点代表每月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"))

1 个答案:

答案 0 :(得分: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)))

给出了 enter image description here

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

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
        )           

enter image description here