我在这做错了什么? 我试图用透明的灰色遮蔽每天24小时交替的矩形。但只有for循环中的最后一个矩形被绘制(?!?)如果我手动而不是for-循环,它可以正常工作。
有没有办法对此进行矢量化以避免for循环? (可以用qplot完成吗?) 我是ggplot2的新手,是的,我读过哈德利的网站,书籍和例子。
第二个问题:美学上的阿尔法设置并不能阻止矩形遮挡背景。如何获得透明度?
dat <- data.frame(my_x_series=1:192, my_y_series=5.0*runif(192))
# (ymin, ymax are computed for this series using min/max(na.rm==TRUE))
ymax <- 5.0
ymin <- 0.0
p <- ggplot(dat, aes(x=my_x_series,alpha=0.9))
alternate_daily_bars_xmin <- c(4,52,100,148)
for (shade_xmin in alternate_daily_bars_xmin) {
shade_xmax <- min(shade_xmin+24, 192) # clamp at end of x-range
p <- p + geom_rect(aes(alpha=0.5,xmin=shade_xmin,xmax=shade_xmax,ymin=ymin,ymax=ymax), fill='gray80')
}
p <- p + geom_point(aes(y=my_y_series))
p
答案 0 :(得分:27)
要绘制矩形,请创建一个数据框,其中每行包含单个矩形的坐标。此构造适用于所有多边形,而不仅仅是矩形。一旦你知道这一点,就很容易避免循环。
然后,请注意是否将变量映射到美学。在您的情况下,您需要将alpha
设置为您希望的任何值,因此它不会成为aes()
设置的一部分。
library(ggplot2)
dat <- data.frame(my_x_series=1:192, my_y_series=5.0*runif(192))
rect_left <- c(4,52,100,148)
rectangles <- data.frame(
xmin = rect_left,
xmax = rect_left + 24,
ymin = 0,
ymax = 5
)
ggplot() +
geom_rect(data=rectangles, aes(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax),
fill='gray80', alpha=0.8) +
geom_point(data=dat, aes(x=my_x_series, y=my_y_series))