Упростить несколько диаграмм в одном графике

#r #dataframe #ggplot2 #boxplot

#r #фрейм данных #ggplot2 #блок-график

Вопрос:

У меня есть набор данных с 17 вопросами (Q1 — Q17) и категориальной переменной (Region).

 > df[, c("Region", QUESTIONS)]
# A tibble: 963 x 18
   Region     Q1    Q2    Q3    Q4    Q5    Q6    Q7    Q8    Q9   Q10   Q11   Q12   Q13   Q14   Q15
   <chr>   <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int>
 1 USA         0     1     0     0     0     0     0     0     0     0     0     0     0     0     0
 2 USA         8     8     8     8     6     8     8     0     5    10     7     0     0    10     8
 3 USA         9     8     7    10     8     4     8     0     5     8     8     8     2     7     6
 4 USA         4     2     5     4     3     3     2     0     1     0     0     0     3     2     0
 5 USA         2     6     7     5     6     2     9     0     6     7     3     0     0     8     5
 6 USA         6     6     8     1     2     0     4     0     0     4     0     6    10     0     1
 7 USA         5     2     7     8    10     9    10     8     6    10     1    10     4     6    10
 8 IE          6     6     5     5     6     5     6     3     6     7     6     6     7     7     4
 9 OCEANIA     8     8     6    10     5    10     5     1    10     4     0     1    10     9    10
10 USA         3     2     2     7     3     1     2     0     8     3     3     1     0     8     8
# ... with 953 more rows, and 2 more variables: Q16 <int>, Q17 <int>
  

Я хочу сравнить ответы по регионам, поэтому я сначала расплавляю df, а затем создаю диаграмму в формате boxplot, используя ggplot.

df1 <- расплавить(df[, c(«Регион», ВОПРОСЫ)])
ggplot(данные =df1, aes (x = переменная, y = значение, заливка = регион)) geom_boxplot()

К сожалению, блок-график с 17 вопросами и 13 областями невероятно перегружен и практически непонятен. Как я могу упростить это (скажем, вывести только среднее значение и стандартную ошибку / -1), чтобы это было разборчиво. В качестве альтернативы, как я могу сгенерировать 17 наборов блок-графиков (по одному на вопрос, и мне нужны все 17 вопросов), на каждом из которых будут видны 13 областей?

С уважением

Томас Филипс

Ответ №1:

Возможно, вы хотите использовать facet_wrap() . Здесь я использую некоторые упрощенные поддельные данные, чтобы дать вам представление.

 library(dplyr)
library(tidyr)
library(ggplot2)
set.seed(12234)
df <- data.frame(Region = sample(LETTERS[1:10], 100, TRUE),
                 Q1 = rpois(100, 4),
                 Q2 = rpois(100, 3),
                 Q3 = round(runif(100, 1, 10)),
                 Q4 = round(runif(100, 1, 10)),
                 Q5 = round(10 * rnorm(100)))
df %>% pivot_longer(cols = -Region, names_to = "Question", values_to = "Value") %>%
  ggplot()  
  geom_boxplot(aes(x = Region, y = Value, fill = Region))   
  facet_wrap("Question")
  

фасетные диаграммы

Комментарии:

1. Вы можете использовать nrow или ncol аргументы facet_wrap() для управления тем, как расположены графики.

2. Это великолепно — спасибо. Я не знал о facet_wrap () и facet_grid(). Сейчас я борюсь с последним — упорядочиванием графиков: с 17 вопросами я хотел бы видеть графики упорядоченными последовательно, т. е. Q1, Q2, .Q3….. Вместо этого они упорядочены лексикографически, т.е. Q1, Q10, Q11, … Q17, Q2, Q3, …, Q9. Я попытался отсортировать свой фрейм данных и просмотрел различные документы и сообщения в блогах, но не смог решить эту проблему. Могу я попросить вас указать мне на решение?

3. Решил это — мне пришлось определить Q1, …. Q17 как фактор. Теперь работает как по волшебству. Еще раз спасибо!