这是我之前关于如何根据给定条件是否满足对绘图区域进行着色的问题的后续问题。
当向图中添加多个geom_*图层ggplot2时,默认情况下,这些图层显然是按照它们添加到图中的顺序绘制的。例如,在我对上一个问题的回答geom_rect()中,在一层之后添加了一个半透明层geom_line()。结果,矩形重叠处的线条颜色略有变化;放大时这一点尤其明显:
我想通过将geom_rect()图层放在图层后面(下方)来避免这种情况geom_line()。
显而易见的解决方案是按该顺序添加层,即ggplot(...) + geom_rect(...) + geom_line()。这适用于我之前问题中的人工示例。
然而,在我的实际应用程序中,这并不那么容易。我有一个相对复杂的情节,我想使用几组不同的条件通过阴影来突出显示所述情节中的时期。我正在做的是
g),然后,对于我想单独突出显示的每组条件,g + geom_rect(...) + scale_fill_discrete(...)以添加所需的阴影。在剩余图层之前添加geom_rect(...)将需要我为每个新版本重新创建具有不同突出显示的复杂绘图,我宁愿避免这种情况。
在我看来,显而易见的答案是明确地告诉ggplot2各层的 Z 顺序,例如ggplot(...) + geom_line(z.order = 0, ...) + geom_rect(z.order = -1, ...)在我的人工示例中。但我不知道如何做到这一点,或者是否可能。我在 Google 和 StackOverflow 中搜索了解决方案,但没有发现任何真正有帮助的东西,除了一些建议,这些建议实际上使用当前版本可能无法实现ggplot2。
任何帮助将不胜感激。一如既往,谢谢!
我正在使用ggplot()和geom_line()为随着时间的推移而发展的价值走廊创建线图。
有时可能会发生上限低于下限(我将其称为“反转”),并且我想突出显示在我的图中发生这种情况的区域,例如使用不同的背景颜色。
搜索 Google 和 StackOverflow 都没有给我带来任何结果。
这是一个人为的例子:
library(tidyverse)
library(RcppRoll)
set.seed(42)
N <- 100
l <- 5
a <- rgamma(n = N, shape = 2)
d <- tibble(x = 1:N, upper = roll_maxr(a, n = l), lower = roll_minr(a + lag(a), n = l)) %>% mutate(inversion = upper < lower)
dl <- pivot_longer(d, cols = c("upper", "lower"), names_to = "Bounds", values_to = "bound_vals")
ggplot(dl, mapping = aes(x = x, y = bound_vals, color = Bounds)) + …Run Code Online (Sandbox Code Playgroud)