Подтвердить что ты не робот

Объясните предупреждение ggplot2: "Удалены k строк, содержащих отсутствующие значения"

Я получаю это предупреждение, когда пытаюсь сгенерировать график с помощью ggplot.

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

В этом вопросе в принятом ответе говорится следующее:

Предупреждение означает, что некоторые элементы удалены, поскольку они выпадают из указанного диапазона

Мне было интересно, что именно относится к этому диапазону и как кто-то может вручную увеличить этот диапазон, чтобы избежать всех предупреждений?

4b9b3361

Ответ 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")

Ответ 2

Просто для встряхивания, завершающего ответ, полученный eipi10.

Я столкнулся с одной и той же проблемой, не используя scale_y_continuous и coord_cartesian.

Конфликт шел от оси x, где я определил limits = c(1, 30). Кажется, что такие ограничения не обеспечивают достаточного пространства, если вы хотите "уклониться" от своих баров, поэтому R по-прежнему выдает ошибку

Удалено 8 строк, содержащих отсутствующие значения (geom_bar)

Настройка пределов оси x на limits = c(0, 31) решила проблему.

В заключение, даже если вы не устанавливаете пределы своей оси y, проверьте свое поведение оси x, чтобы убедиться, что у вас достаточно места.