Для обсуждения этого поведения ggplot2 см. gihub . Поскольку проблема была закрыта и, насколько я понимаю, вы ничего не можете сделать, используя annotate
. Однако для достижения желаемого вы можете просто использовать geom_rect
, например:
library(tidyverse) # ggplot2_3.3.0
df_annotate <- data.frame(
xmin = seq(20, 50, 10),
xmax = seq(30, 60, 10),
ymin = -Inf,
ymax = Inf,
fill = paste0("grey", seq(60, 90, 10))
)
tibble(t = 1:100) %>%
crossing(id = LETTERS[1:4]) %>%
group_by(id) %>%
mutate(y = cumsum(rnorm(n()))) %>%
ggplot() +
geom_rect(aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax, fill = fill), data = df_annotate) +
geom_line(aes(t, y)) +
scale_fill_identity() +
facet_wrap(vars(id)) +
theme_light()
Создано 28 мая 2020 года Пакет репекс (v0.3.0)
Редактировать Используя ggnewscale
, можно иметь вторую или ... шкалу заполнения:
library(tidyverse) # ggplot2_3.3.0
library(ggnewscale)
df_annotate <- data.frame(
xmin = seq(20, 50, 10),
xmax = seq(30, 60, 10),
ymin = -Inf,
ymax = Inf,
fill = paste0("grey", seq(60, 90, 10))
)
df <- tibble(t = 1:100) %>%
crossing(id = LETTERS[1:4]) %>%
group_by(id) %>%
mutate(y = cumsum(rnorm(n())))
ggplot() +
geom_rect(aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax, fill = fill), data = df_annotate) +
scale_fill_identity() +
new_scale_fill() +
geom_area(data = df, aes(t, y, fill = id)) +
facet_wrap(vars(id)) +
theme_light()
Создано 29.05.2020 с помощью пакета . (v0.3.0)