This question already has answers here:
geom_rect and alpha - does this work with hard coded values?

(4 个回答)


去年关闭。




所有,我不确定这个例子出了什么问题:
library(ggplot2)
par(ask = TRUE)
alphaVals <- seq(0.1, 1, 0.1)
for(alpha in alphaVals) print(qplot(x = 1:100, y = 1:100) + geom_rect(xmin = 20, xmax = 70, ymin = -Inf, ymax = Inf, alpha = alpha, fill = 'grey50'))

你可以看到,从 alpha 等于 0 到 0.2 左右,我得到了一些透明度,但在那之后它就消失了。我之前在设置 ggplot2 层的 alpha 比例时从未遇到过问题。

我在这里做错了什么?

最佳答案

这里的问题是 ggplot2 在同一位置绘制矩形 100 次。因此,100 个堆叠的透明形状显示为单个不透明形状。我通过使用 Adob​​e Illustrator 检查 pdf 输出发现了这一点。我在下面提供了一个可能的解决方案(重写为使用 ggplot 语法而不是 qplot)。我当然觉得这种行为是出乎意料的,但我不确定它是否值得被称为错误。

我提出的解决方案包括 (1) 将矩形数据放在它自己的 data.frame 中,以及 (2) 在每一层中单独指定数据(但不在 ggplot() 调用中)。

library(ggplot2)

dat  = data.frame(x=1:100, y=1:100)
rect_dat = data.frame(xmin=20, xmax=70, ymin=0, ymax=100)

# Work-around solution.
p = ggplot() +
    geom_point(data=dat, aes(x=x, y=y)) +
    geom_rect(data=rect_dat,
              aes(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax),
              alpha = 0.3, fill = "black")

ggsave("test.png", plot=p, height=5, width=5, dpi=150)
# Original version with 100 overlapping rectangles.
p2 = ggplot(dat, aes(x=x, y=y)) +
     geom_point() +
     geom_rect(xmin=20, xmax=70, ymin=0, ymax=100, alpha=0.01, fill="black")

ggsave("test.pdf", height=7, width=7)

关于r - 在 ggplot 上为矩形图层设置 alpha 比例时出现意外行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22463581/

10-15 01:49