【问题标题】:Ggplot2 different alpha behaviour [duplicate]Ggplot2不同的alpha行为[重复]
【发布时间】:2016-01-25 21:57:19
【问题描述】:

我最近升级到 R 版本 3.2.3 和 ggplot 版本 2.0.0

尝试将一些旧代码升级到较新版本时,我遇到了 ggplot2 及其透明度设置的奇怪行为。

现在我的问题是,这是一个错误还是一个功能(如果是这样,有人可以告诉我为什么这样做很好)?我想要的结果是(显然)情节 2。

假设我绘制一条线并在其上放置一个透明矩形,如下所示:

library(ggplot2)

plot_data <- data.frame(x = 1:100, y = rnorm(100))

# Plot 1
ggplot(data = plot_data, aes(x = x, y = y)) + 
  geom_line() + 
  geom_rect(aes(xmin = 20, xmax = 50, ymin = -Inf, ymax = Inf), fill = "red", 
            alpha = 0.1) + ggtitle("Plot 1")

# Plot 2
ggplot() + 
  geom_line(data = plot_data, aes(x = x, y = y)) + 
  geom_rect(aes(xmin = 20, xmax = 50, ymin = -Inf, ymax = Inf), fill = "red", 
            alpha = 0.1) + ggtitle("Plot 2")

据我了解,情节 1 和情节 2 应该是相同的。但是,我得到以下图:

情节 1:

和情节 2:

此外,如果我使用 alpha 值(例如将它们设置为 0.01,我会得到以下两个图:

【问题讨论】:

  • 在您的情节 2 中,如果您将 data = plot_data 添加到您的 geom_rect() 中,您将获得与 plot1 相同的结果
  • 这很有趣,但在我的理解中并没有反映 0.1 的 alpha(非常透明)!

标签: r ggplot2


【解决方案1】:

我相信在没有data 参数的情况下调用geom_rect 将有效地为data.frame 的每一行绘制一个单独的矩形,这就是alpha 是“工作”的原因,但并不像预期的那样。我无法复制并在方法之间达成平等/一致,但正如您所指出的,我认为它正在沿着绘制 100 个单独的矩形或 30 个(矩形的宽度;从 20 到50) 这就是为什么 alpha = 0.1 / 100alpha = 0.1 / 30 让你更接近,但不完全匹配。

无论如何,我可能会使用annotate,因为它可以更好地描述您试图在没有问题的情况下实现的行为/结果,并且在这两种情况下都可以正常工作——annotations 将绘制一个 /em> 每个geom 的实例:

ggplot(data = plot_data, aes(x = x, y = y)) + 
  # geom_rect(aes(xmin = 20, xmax = 50, ymin = -Inf, ymax = Inf, alpha = 0.1, fill = "red")) +
  annotate("rect", xmin = 20, xmax = 50, ymin = -Inf, ymax = Inf, alpha = 0.1, fill = "red") +
  geom_line() + 
  ggtitle("Plot 1")

ggplot() + 
  geom_line(data = plot_data, aes(x = x, y = y)) + 
  # geom_rect(aes(xmin = 20, xmax = 50, ymin = -Inf, ymax = Inf), fill = "red", alpha = 0.1) + 
  annotate("rect", xmin = 20, xmax = 50, ymin = -Inf, ymax = Inf, fill = "red", alpha = 0.1) +
  ggtitle("Plot 2")

【讨论】:

  • 为每一行绘制 1 个矩形可能是造成它的原因,至少在我看来是合理的!
  • @David 发现了一个similar question here,暗示了相同的逻辑/推理;我仍然困扰着我无法让它们“匹配”。
  • 我还偶然发现了这个question 提到在geom_rect 中只使用一行..
猜你喜欢
  • 1970-01-01
  • 2022-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-26
  • 1970-01-01
相关资源
最近更新 更多