Добавьте заштрихованную область на всех панелях на графике - PullRequest
1 голос
/ 17 февраля 2020

У меня есть фрейм данных df:

 set.seed(3467)

 df<- data.frame(method= c(rep("A", 1000), rep("B", 1000), rep("C", 1000)), 
            beta=c(rnorm(1000, mean=0, sd=1),rnorm(1000, mean=2, sd=1.4),rnorm(1000, mean=0, sd=0.5)))

I wi sh, чтобы создать график с ребрами, например:

ggplot(df, aes(x = beta, y = method, color = method, fill = method)) +
geom_density_ridges(size=1)+
scale_fill_manual(values = c("#228b2250", "#0072B250", "#483d8b50")) +
scale_color_manual(values = c("#228b22", "#0072B2", "#483d8b"), guide = "none") +
stat_density_ridges(quantile_lines = TRUE, quantiles = c(0.025, 0.5, 0.975), alpha = 0.6, size=1)

I w * sh, чтобы добавить заштрихованный прямоугольник примерно так:

ggplot(df) +
geom_rect(data = data.frame(x = 1),
        xmin = -1, xmax = 1, ymin = -Inf, ymax = Inf,
        alpha = 0.5, fill = "gray") +
geom_density_ridges2(aes(x = beta, fill = method, y = method))

Однако эта попытка не удалась:

ggplot(df, aes(x = beta, y = method, color = method, fill = method)) +
geom_density_ridges(size=1)+
scale_fill_manual(values = c("#228b2250", "#0072B250", "#483d8b50")) +
scale_color_manual(values = c("#228b22", "#0072B2", "#483d8b"), guide = "none") +
stat_density_ridges(quantile_lines = TRUE, quantiles = c(0.025, 0.5, 0.975), alpha = 0.6, size=1)+
geom_rect(data = data.frame(x = 1),
        xmin = -1, xmax = 1, ymin = -Inf, ymax = Inf,
        alpha = 0.5, fill = "grey") 

Функция geom_rect() не работает только с geom_density_ridges() geom_density_ridges2().

1 Ответ

0 голосов
/ 17 февраля 2020

Это то, что вы ищете? Это небольшая модификация вашего кода. Я думаю, что мы можем конкретно указать фрейм данных и aes для каждого слоя, если некоторые элементы не могут быть распознаны.

library(ggplot2)
library(ggridges)

ggplot() +
  geom_rect(data = data.frame(x = 1),
            xmin = -1, xmax = 1, ymin = -Inf, ymax = Inf,
            alpha = 0.5, fill = "gray") +
  geom_density_ridges(data = df, aes(x = beta, y = method, color = method, fill = method),
                      size=1)+
  scale_fill_manual(values = c("#228b2250", "#0072B250", "#483d8b50")) +
  scale_color_manual(values = c("#228b22", "#0072B2", "#483d8b"), guide = "none") +
  stat_density_ridges(data = df, aes(x = beta, y = method, color = method, fill = method),
                      quantile_lines = TRUE, quantiles = c(0.025, 0.5, 0.975), alpha = 0.6, size=1)

enter image description here

...