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 ответа:
Часть проблемы заключалась в изменении заливки точки, поскольку заливка-это свойство, определяющее, что должны быть нарисованы два прямоугольника разного цвета, точка ведет себя так, как если бы снова была только одна группа. Я думаю, это должно дать вам то, что вы хотите.
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")