#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 как фактор. Теперь работает как по волшебству. Еще раз спасибо!