Укажите порядок для групп при использовании unite из dplyr для построения графиков с ggplot - PullRequest
0 голосов
/ 11 февраля 2019

Я хотел сделать что-то вроде этого

Добавить несколько сравнений, используя ggsignif или ggpubr для подгрупп без меток на оси x

Я получил это далеко:

Пакеты и данные примеров

library(tidyverse)
library(ggpubr)
library(ggpol)
library(ggsignif)

example.df <- data.frame(species = sample(c("primate", "non-primate"), 50, replace = TRUE),
                         treated = sample(c("Yes", "No"), 50, replace = TRUE),
                         gender = sample(c("male", "female"), 50, replace = TRUE), 
                         var1 = rnorm(50, 100, 5))

Уровни

example.df$species <- factor(example.df$species, 
                             levels = c("primate", "non-primate"), labels = c("p", "np"))
example.df$treated <- factor(example.df$treated, 
                             levels = c("No", "Yes"), labels = c("N","Y"))
example.df$gender <- factor(example.df$gender, 
                            levels = c("male", "female"), labels = c("M", "F"))

Так как мне не повезло заставить ggsignif или ggpubr работать с размещением значимогогруппы правильно, когда группы, на которые они должны ссылаться, не имеют явного имени на оси x (так как они являются подгруппами каждой переменной на оси x и указаны только в легенде заполнения, а не на оси x, я попробовал этовместо этого.

example.df %>% 
  unite(groups, species, treated, remove = F, sep= "\n") %>% 
  {ggplot(., aes(groups, var1, fill= treated)) + 
     geom_boxjitter() +
     facet_wrap(~ gender, scales = "free") +
     ggsignif::geom_signif(comparisons =  combn(sort(unique(.$groups)), 2, simplify = F),
                           step_increase = 0.1)}

Я понял,

Граненый график со значениями значимости, рассчитанными для каждой группы Faceted plot with significance values computed for every group

Однако порядокОбъединенные группы на оси X не так, как я хочу. Я хочу заказать это с p / N, np / N, p / Y, np / Y для каждого аспекта.

Как мне сделатьэто? Любая помощь с благодарностью.

Редактировать : Создание новой переменной с помощью mutaи сделать его упорядоченным фактором с моим предпочтительным порядком построения графиков.

example.df %>% 
  unite(groups, species, treated, remove = F, sep= "\n") %>% 
  mutate(groups2 = factor(groups, levels = c("p\nN", "np\nN", "p\nY", "np\nY"),
                          ordered = TRUE)) %>% 
  {ggplot(., aes(groups2, var1, fill= treated)) +
     geom_boxjitter() + 
     facet_wrap(~gender,scales = "free") +
     ggsignif::geom_signif(comparisons = combn(sort(unique(.$groups2)), 2, simplify = F), 
                           step_increase = 0.1)}

Но я все еще ищу решения о том, чтобы вообще не использовать unite и сохранять исходные факторы, и все еще получать значения значимости для построения с использованием ggsignif или ggpubr.

1 Ответ

0 голосов
/ 13 февраля 2019

Параметры по умолчанию для interaction (из базового пакета), по-видимому, дают требуемый порядок упорядочения:

result

example.df %>%
  mutate(groups = interaction(species, treated, sep = "\n")) %>%
  {ggplot(., aes(groups, var1, fill= treated)) + 
    geom_boxjitter() +
    facet_wrap(~ gender, scales = "free") +
    geom_signif(comparisons = combn(sort(as.character(unique(.$groups))), 2, simplify = F),
                step_increase = 0.1)}
...