С ?aes_group_order
(выделение добавлено):
По умолчанию группа настроена на взаимодействие всех дискретных переменных на графике .Это часто правильно разделяет данные, но когда это не так, или когда на графике не используется дискретная переменная, вам нужно будет явно определить структуру группировки, сопоставив группу с переменной, имеющей различное значение для каждой группы.
С
ToothGrowth %>%
mutate(dose = factor(dose)) %>%
ggplot(aes(dose, len)) +
stat_boxplot(aes(fill = supp), geom = "errorbar", position = "dodge")
Группа для столбцов ошибок автоматически устанавливается на взаимодействие дозы (которая была преобразована в фактор, то есть дискретную переменную) и supp (которая ужефактор в наборе данных роста зуба).Другими словами, каждая комбинация дозы c(0.5, 1, 1.5)
и Supp c("OJ", "VJ")
рассматривается как отдельная группа для целей расчета сводной статистики по коробочному графику.В результате отображаемые полосы ошибок идеально соответствуют слою коробочного графика, хотя заливка не относится к эстетике для geom_errorbar
.
с
ToothGrowth %>%
mutate(dose = factor(dose)) %>%
ggplot(aes(dose, len)) +
stat_boxplot(aes(group = supp), geom = "errorbar", position = "dodge")
Группа для панелей ошибокявно установлено как supp и only supp.Это отменяет поведение по умолчанию, поэтому вместо 6 групп, как указано выше, у нас есть только две (одна для «OJ» и одна для «VJ»).Это приводит к несоответствию между слоем панелей ошибок и слоем boxplot.
Вы можете явно настроить отображение группы так, чтобы имитировать поведение по умолчанию:
p1 <- ToothGrowth %>%
mutate(dose = factor(dose)) %>%
ggplot(aes(dose, len)) +
stat_boxplot(aes(group = interaction(dose, supp)), geom = "errorbar", position = "dodge") +
geom_boxplot(aes(fill = supp), position = "dodge", coef = 0)
p1
layer_data(p1, 1L) # view data associated with error bar layer
layer_data(p1, 2L) # view data associated with boxplot layer
p2 <- ToothGrowth %>%
mutate(dose = factor(dose)) %>%
ggplot(aes(dose, len)) +
stat_boxplot(aes(group = interaction(supp, dose)), geom = "errorbar", position = "dodge")+
geom_boxplot(aes(fill = supp), position = "dodge", coef = 0)
p2
layer_data(p2, 1L) # view data associated with error bar layer
layer_data(p2, 2L) # view data associated with boxplot layer
Примечание: interaction(dose, supp)
и interaction(supp, dose)
приведут к тому же графику с точки зрения внешнего вида, хотя, если вы хотите сравнить базовые данные, связанные с каждым слоем, interaction(dose, supp)
генерирует группы в том же порядке, что и по умолчанию, тогда как interaction(supp, dose)
не.