#r #ggplot2 #mean #boxplot
Вопрос:
У меня есть данные с двумя категориальными переменными. Я могу поместить их в коробку, но я не могу получить средства для отображения в правильном положении. Я создал эффект в наборе данных iris (красные прямоугольники добавляются вручную, а не в ggplot).
Iris <- iris %>%
mutate(SepalLengthType = ifelse(Sepal.Length > 5.8, "high", "low"))
means <- Iris %>%
group_by(Species, SepalLengthType) %>%
summarise(Sepal.Width = mean(Sepal.Width), .groups = "keep")
plot <- ggplot(data = Iris, aes(y=Sepal.Width, x = SepalLengthType, colour = Species))
geom_boxplot()
Теперь я хочу добавить средства к каждому прямоугольному участку
Эти строки ниже всех работают, но среднее значение сосредоточено не на прямоугольном графике, а на категории SepelLengthType.
plot stat_summary(fun = "mean" , aes(color = Species), shape = 15)
plot stat_summary(fun = "mean" , aes(group = Species), shape = 15)
plot stat_summary(fun.y = "mean", shape = 15) # this works, but is deprecated
plot geom_point(data = means, aes(color = Species), shape = 15)
Как можно отобразить средства в середине каждого прямоугольника?
Я ценю, что мог бы переставить данные так, чтобы каждый набор точек данных находился в своем собственном столбце, но поскольку они не все одинаковой длины, для этого нужны собственные обходные пути.
Когда я использую fun = «имею в виду», я получаю предупреждающее сообщение «Удалены 5 строк, содержащих пропущенные значения (geom_segment)». Это почему? В строке «средства» этой проблемы нет, но я бы предпочел не вычислять средства самостоятельно.
Ответ №1:
Вы можете использовать position=position_dodge(0.9)
, например, следующий код
library(tidyverse)
Iris <- iris %>%
mutate(SepalLengthType = ifelse(Sepal.Length > 5.8, "high", "low"))
means <- Iris %>%
group_by(Species, SepalLengthType) %>%
summarise(Sepal.Width = mean(Sepal.Width), .groups = "keep")
plot <- ggplot(data = Iris, aes(y=Sepal.Width, x = SepalLengthType, colour = Species))
geom_boxplot(position=position_dodge(0.9))
plot geom_point(data = means, aes(color = Species), shape = 15,
position = position_dodge2(width = 0.9))
или использовать stat_summary
в качестве
plot stat_summary(fun = "mean", aes(group = Species), shape = 15,
position = position_dodge2(width = 0.9))
Комментарии:
1. Большое спасибо, позиционный додж сделал свое дело. Но знаете ли вы, почему я получаю предупреждение? «Удалены 4 строки, содержащие недостающие значения (geom_segment)».
2. Я думаю, это потому, что setosa не имеет никакой ценности в рамках высокой категории.
3. Нет, я получаю то же самое предупреждение с моими собственными данными. Для моих данных удалены 4 строки, а здесь удалены 5 строк. Это относится к количеству боксовых участков. Если я отброшу цвет= Вид и у меня будет только два боковых графика, то в предупреждающих сообщениях будет написано: «Удалены 2 строки, содержащие недостающие значения (geom_segment)».