ggplot2 показать отдельные средние значения в поле график для сгруппированных данных


Я хотел бы создать прямоугольную диаграмму для сгруппированных данных, которая показывает среднее значение каждой группы в виде точки в прямоугольнике. Используя следующий код, я получаю только одну точку для двух групп.

df <- data.frame(a=factor(rbinom(100, 1, 0.45), label=c("m","w")), 
    b=factor(rbinom(100, 1, 0.3), label=c("young","old")),
    c=rnorm(100))
ggplot(aes(y = c, x = b, fill = a), data = df) + 
    geom_boxplot() +
    stat_summary(fun.y="mean", geom="point", shape=21, size=5, fill="white")

Введите описание изображения здесь

2 6

2 ответа:

Часть проблемы заключалась в изменении заливки точки, поскольку заливка-это свойство, определяющее, что должны быть нарисованы два прямоугольника разного цвета, точка ведет себя так, как если бы снова была только одна группа. Я думаю, это должно дать вам то, что вы хотите.

ggplot(df, aes(x=b, y=c, fill=a)) +
  geom_boxplot() +
  stat_summary(fun.y="mean", geom="point", size=5,
    position=position_dodge(width=0.75), color="white")

коробка участок с

Не уверен, что это самый эффективный способ сделать это.

Во-первых, вы можете создать фиктивный набор данных, который будет содержать средства на a на b, используя aggregate Затем разберите его на geom_point и добавьте position_dodge(width=.75) , которые, похоже, соответствуют умолчанию dodge в geom_boxplot

library(ggplot2)
df <- data.frame(a=factor(rbinom(100, 1, 0.45), label=c("m","w")), 
                 b=factor(rbinom(100, 1, 0.3), label=c("young","old")),
                 c=rnorm(100))

means <- aggregate(c ~ a + b, df, mean)

ggplot(aes(y = c, x = b, fill = a), data = df) + 
geom_boxplot() +
geom_point(data = means, aes(y = c, x = b), position=position_dodge(width=.75), color = "white")

Введите описание изображения здесь