#r #ggplot2 #facet
#r #ggplot2 #фасет
Вопрос:
Я борюсь с заданием, которое задает нам следующее:
у нас есть два набора данных с идентификатором вопросов как наблюдения и ответом как переменной для 2 групп
First set
True False
Q1 30 20
Q2 25 25
Second set set
True False
Q1 30 20
Q2 25 25
меня просят создать диаграмму фасетов с gg plot, в которой ответы одной группы на параллельные диаграммы сопоставляются с ответами другой группы для каждого вопроса, поэтому по каждому вопросу у вас есть диаграмма с одной полосой для каждого типа ответа, причем обе группы имеют разные цвета.
По правде говоря, я понятия не имею, как это сделать, хотя я просмотрел документацию, я нахожу GGplot действительно беспорядочным: O
Ответ №1:
Я бы предложил tidyverse
подход, использующий ggplot2
, как упоминалось. Сначала у вас должны быть данные в следующей структуре (я добавляю dput()
версию, чтобы сделать пример воспроизводимым):
#Data
df <- structure(list(True = c(30L, 25L, 30L, 25L), False = c(20L, 25L,
20L, 25L), Group = c("Group 1", "Group 1", "Group 2", "Group 2"
), Question = c("Q1", "Q2", "Q1", "Q2")), row.names = c(NA, -4L
), class = "data.frame")
Вы можете использовать rbind()
или bind_rows()
из dplyr
для привязки включенных вами данных. Затем необходимо разделить группы следующим образом:
True False Group Question
1 30 20 Group 1 Q1
2 25 25 Group 1 Q2
3 30 20 Group 2 Q1
4 25 25 Group 2 Q2
С помощью этого вы можете нарисовать график с помощью этого кода, изменив форму данных и включив нужные элементы в график в виде столбиков ( geom_bar()
), и вы можете фасетировать или разбивать на некоторую переменную с помощью facet_wrap()
:
df %>% pivot_longer(cols = -c(Group,Question)) %>%
ggplot(aes(x=Group,y=value,fill=Question))
geom_bar(stat = 'identity',position = position_dodge())
facet_wrap(.~name)
Вывод: