Использование scale_y_continuous(limits=)
фильтрует базовые данные, поэтому среднее значение / медиана в stat_summary относятся к предварительно отфильтрованным данным.
Чтобы просто увеличить масштаб без изменения базовых данных, используйте coord_cartesian
например
+ coord_cartesian(ylim=c(0, 1000))
Вот воспроизводимый пример :
library(ggplot2)
p <- ggplot(iris, aes(x=Species, y=Sepal.Length)) + geom_point() +
stat_summary(fun.y='mean', geom='point', size=2, col='red')
p
# mean(subset(iris, Species == 'setosa')$Sepal.Length) # 5.006
Обратите внимание, что средняя длина Sepal для setosa составляет около 5. Теперьдавайте ограничим ось Y.
p + scale_y_continuous(lim=c(5, 8), minor_breaks=seq(5, 8, by=0.1))
Warning messages:
1: Removed 22 rows containing non-finite values (stat_summary).
2: Removed 22 rows containing missing values (geom_point).
Обратите внимание на предупреждающие сообщения и увидим, что на полученном графике средняя длина Sepal для setosa теперь немного больше 5,2.Чтобы подтвердить, что scale_y_continuous
действительно фильтрует данные перед вычислением stat_summary
,
mean(subset(iris, Species == 'setosa' & Sepal.Length >= 5)$Sepal.Length)
# 5.23
, тогда как, если я просто сделаю
p + coord_cartesian(ylim=c(5, 8))
, средства будут такими же, как на оригинале.данные.(Вы все еще можете использовать scale_y_continuous
для перерывов, только не используйте ограничения).