我试图“捕捉”一个栏内的一些点。 这些点代表每月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"))
答案 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)))
给出了
或绘制具有您希望它们的确切范围的矩形
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
)
给