Ответ 1
Поведение, которое вы видите, связано с тем, как ggplot2
имеет дело с данными, находящимися вне диапазонов осей графика. Вы можете изменить это поведение в зависимости от того, используете ли вы scale_y_continuous
(или, что эквивалентно, ylim
) или coord_cartesian
для установки диапазонов осей, как описано ниже.
library(ggplot2)
# All points are visible in the plot
ggplot(mtcars, aes(mpg, hp)) +
geom_point()
В приведенном ниже коде одна точка с hp = 335 находится за пределами y-диапазона графика. Кроме того, поскольку мы использовали scale_y_continuous
для установки диапазона оси y, эта точка не включается ни в какие другие статистические или суммарные измерения, вычисленные ggplot, такие как линия линейной регрессии.
ggplot(mtcars, aes(mpg, hp)) +
geom_point() +
scale_y_continuous(limits=c(0,300)) + # Change this to limits=c(0,335) and the warning disappars
geom_smooth(method="lm")
Warning messages:
1: Removed 1 rows containing missing values (stat_smooth).
2: Removed 1 rows containing missing values (geom_point).
В приведенном ниже коде точка с hp = 335 все еще находится за пределами y-диапазона графика, но эта точка, тем не менее, включена в любые статистические или суммарные измерения, которые вычисляют ggplot, такие как линия линейной регрессии. Это связано с тем, что мы использовали coord_cartesian
для установки диапазона оси y, и эта функция не исключает точек, находящихся за пределами диапазонов графика, когда она выполняет другие вычисления данных.
Если вы сравните этот и предыдущий график, вы увидите, что линия линейной регрессии на втором участке имеет слегка более крутой наклон, поскольку при вычислении линии регрессии включается точка с hp = 335, хотя она не видна в сюжете.
ggplot(mtcars, aes(mpg, hp)) +
geom_point() +
coord_cartesian(ylim=c(0,300)) +
geom_smooth(method="lm")