Изменение порядка панелей на гряде - PullRequest
1 голос
/ 17 февраля 2020

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

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, чтобы создать график гребня, подобный следующему:

library(ggplot2)
library(ggridges)

ggplot() +
geom_rect(data = data.frame(x = 1),
        xmin = -0.391, xmax = 0.549, ymin = -Inf, ymax = Inf,
        alpha = 0.5, fill = "gray") +
 geom_density_ridges(data = df, aes(x = beta, y = method, color = method, fill = method),
                  size=0.75)+
 xlim(-5,5)+
 scale_fill_manual(values = c("#483d8b50", "#0072B250","#228b2250")) +
 scale_color_manual(values = c("#483d8b", "#0072B2", "#228b22"), 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=0.75)+
scale_y_discrete(expand = expand_scale(add = c(0.1, 0.9)))

Однако, я w * sh для упорядочить ось Y в порядке method= "B", "C", "A", а не method= "A", "B", "C"

. Я попытался, но безуспешно, переупорядочить графики плотности:

library(dplyr)
df %>%
 mutate(method = fct_relevel(method, 
                        "B", "C", "A"))%>%
ggplot() +
geom_rect(data = data.frame(x = 1),
        xmin = -0.391, xmax = 0.549, ymin = -Inf, ymax = Inf,
        alpha = 0.5, fill = "gray") +
 geom_density_ridges(data = df, aes(x = beta, y = method, color = method, fill = method),
                  size=0.75)+
 xlim(-5,5)+
 scale_fill_manual(values = c("#483d8b50", "#0072B250","#228b2250")) +
 scale_color_manual(values = c("#483d8b", "#0072B2", "#228b22"), 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=0.75)+
scale_y_discrete(expand = expand_scale(add = c(0.1, 0.9)))

Ответы [ 2 ]

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

Вы были почти там. - Вам необходимо указать аргумент levels в fct_relevel. (См. ?fct_relevel: аргумент levels отсутствует, но ..., вам необходимо указать его имя!)

library(tidyverse)
library(ggridges)
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)))

# here is the main change: 
df <- df %>%
  mutate(method = fct_relevel(method, levels = "B", "C", "A"))

  ggplot(df) +
  geom_density_ridges(data = df, aes(x = beta, y = method, color = method, fill = method))
#> Picking joint bandwidth of 0.225

Создано в 2020-02-17 по представьте пакет (v0.3.0)

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

Если вы измените столбец метода на упорядоченный коэффициент, он должен работать:

df$method <- factor(df$method, levels = c("C", "A", "B"), ordered = TRUE)
...