相同的标题,但完全重写了这个问题。
为什么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)
答案 0 :(得分:91)
感谢您澄清您的问题。这让我感到困惑,所以我去谷歌,结束了learning something new(在他们的例子中解决了一些变幻莫测的问题后)。显然你正在做的是在彼此之上绘制许多矩形,有效地消除了你想要的半透明度。因此,解决这个问题的唯一方法是将矩形坐标硬编码为单独的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")
...只是不要将您的data.frame全局分配给绘图。相反,只在你想要的图层中使用它(在这个例子中,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。
两种方法都返回相同的图:
答案 1 :(得分:15)
另一种解决方法是为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)
答案 2 :(得分:2)
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)
答案 3 :(得分:0)
对于那些尝试在构面时在geom_rect中指定填充和alpha值的人,我发现我必须在数据框中指定与每个构面相符的一行,以使矩形出现在该构面中。对于一个三面的点图和两个矩形,它们跨越了三个面:
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) +