Geom_rect 和 alpha-这是否与硬编码值一起工作?

同样的标题,完全改变了问题的措辞。

为什么阿尔法在第一个情节中起作用,而在第二个情节中却不起作用?我很难理解为什么硬编码的 rect 在正确的位置绘制,而不是透明的,但是当在 data.frame 中时,它会像预期的那样工作?

mtcars$cyl <- factor(mtcars$cyl)
mtcars$am <- factor(mtcars$am)


ggplot(mtcars) +
geom_density(aes(x=disp, group=cyl, fill=cyl), alpha=0.6, adjust=0.75) +
geom_rect(data=data.frame(xmin=100, xmax=200, ymin=0, ymax=Inf), aes(xmin=xmin, xmax=xmax, ymin=ymin,ymax=ymax), fill="red", alpha=0.2)


ggplot(mtcars) +
geom_density(aes(x=disp, group=cyl, fill=cyl), alpha=0.6, adjust=0.75) +
geom_rect(aes(xmin=100, xmax=200, ymin=0,ymax=Inf), fill="red", alpha=0.2)
46448 次浏览
ggplot(df, aes(xmin = x, xmax = x + 1, ymin = y, ymax = y + 2)) +
geom_rect(alpha=.2) +
geom_rect(data=data.frame(xmin=3, xmax=6, ymin=3, ymax=5),
aes(xmin=xmin,xmax=xmax,ymin=ymin,ymax=ymax),
fill="green", alpha=.2)

这让我很困惑,所以我去谷歌一下,结果是 学习新东西(在他们的例子中解决了一些不可思议的问题之后)。

显然,您正在做的是在彼此之上绘制许多矩形,有效地抵消了您想要的半透明性。因此,克服这个问题的唯一方法是将矩形坐标硬编码到一个单独的 df 中,或者..。

ggplot() +
geom_density(data=mtcars, aes(x=disp, group=cyl, fill=cyl), alpha=0.6, adjust=0.75) +
geom_rect(aes(xmin=100, xmax=200, ymin=0,ymax=Inf), alpha=0.2, fill="red")

只是不要把你的数据帧分配到全局。相反,只在您想要的层(在本例中是 geom_density)中使用它,并且让其他层保持 df 自由!或者,更好的方法是,使用 annotate修改默认 df 下的绘图:

ggplot(mtcars) +
geom_density(aes(x=disp, group=cyl, fill=cyl), alpha=0.6, adjust=0.75) +
annotate("rect", xmin=100, xmax=200, ymin=0, ymax=Inf, alpha=0.2, fill="red")

后一种方法允许对整个绘图使用单个 data.frame,因此不必为每个层指定相同的 df。

两种方法都返回相同的情节:

enter image description here

另一个解决办法是给 geom_rect()一个单行数据对象,以确保只绘制一个矩形:

ggplot(mtcars) +
geom_density(aes(x=disp, group=cyl, fill=cyl), alpha=0.6, adjust=0.75) +
geom_rect(data=mtcars[1,], aes(xmin=100, xmax=200, ymin=0,ymax=Inf), fill="red", alpha=0.2)

enter image description here

对于那些试图在分面时在 geom _ rect 中指定 fill 和 alpha 值的人,我发现必须在数据框中指定与每个分面相符的行,才能使矩形显示在该分面中。对于一个三面的点图和两个矩形延伸到3个方面:

plotpnts = ggplot(SHDates, aes(x=Order, y=NewMean))
Fig2 = plotpnts +


# Rectangles for time periods
geom_rect(data=SHDates[1,], xmin=0,ymin=500,xmax=39,ymax=1100, fill="red",    alpha=0.4) +
geom_rect(data=SHDates[11,], xmin=0,ymin=500,xmax=39,ymax=1100, fill="red", alpha=0.4) +
geom_rect(data=SHDates[22,], xmin=0,ymin=500,xmax=39,ymax=1100, fill="red", alpha=0.4) +
geom_rect(data=SHDates[1,], xmin=0,ymin=1000,xmax=39,ymax=1400, fill="orange", alpha=0.4) +
geom_rect(data=SHDates[11,], xmin=0,ymin=1000,xmax=39,ymax=1400, fill="orange", alpha=0.4) +
geom_rect(data=SHDates[22,], xmin=0,ymin=1000,xmax=39,ymax=1400, fill="orange", alpha=0.4) +