Я получаю это предупреждение, когда пытаюсь создать график с помощью ggplot
.
После некоторого исследования в Интернете многие предположили, что моя база данных содержит либо нулевые значения, либо отсутствующие данные в целом, что было не так.
На этот вопрос принятый ответ гласит следующее:
Предупреждение означает, что некоторые элементы удалены, поскольку они выпадают из указанного диапазона.
Мне было интересно, к чему именно относится этот диапазон и как кто-то может вручную увеличить этот диапазон, чтобы избежать всех предупреждений?
y
этом вопросе есть предел оси. Значения ограничены между 0 и 0,12 из-за этой функции:ylim(0,0.12)
Ответы:
Поведение, которое вы видите, связано с тем, как
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")
источник
Просто для встряски, завершающей ответ, данный eipi10.
Я столкнулся с той же проблемой, не используя
scale_y_continuous
ниcoord_cartesian
.Конфликт исходил от оси x, которую я определил
limits = c(1, 30)
. Кажется, что такие ограничения не предоставляют достаточно места, если вы хотите «увернуться» от ваших полос, поэтому R все равно выдает ошибкуРегулировка пределов оси x для
limits = c(0, 31)
решения проблемы.В заключение, даже если вы не ограничиваете свою ось y, проверьте поведение оси x, чтобы убедиться, что у вас достаточно места.
источник
Даже если ваши данные попадают в указанные вами пределы (например
c(0, 335)
), добавлениеgeom_jitter()
оператора может вывести некоторые точки за эти пределы, что приведет к тому же сообщению об ошибке.library(ggplot2) range(mtcars$hp) #> [1] 52 335 # No jitter -- no error message ggplot(mtcars, aes(mpg, hp)) + geom_point() + scale_y_continuous(limits=c(0,335)) # Jitter is too large -- this generates the error message ggplot(mtcars, aes(mpg, hp)) + geom_point() + geom_jitter(position = position_jitter(w = 0.2, h = 0.2)) + scale_y_continuous(limits=c(0,335)) #> Warning: Removed 1 rows containing missing values (geom_point).
Создано 24.08.2020 с помощью пакета REPEX (v0.3.0)
источник
Я тоже столкнулся с этим, но в том случае, когда я хотел избежать дополнительных сообщений об ошибках, сохраняя указанный диапазон. Также можно задать подмножество данных перед установкой диапазона, чтобы диапазон можно было сохранить, как вам нравится, без появления предупреждений.
library(ggplot2) range(mtcars$hp) #> [1] 52 335 # Setting limits with scale_y_continous (or ylim) and subsetting accordingly ## avoid warning messages about removing data ggplot(data= subset(mtcars, hp<=300 & hp >= 100), aes(mpg, hp)) + geom_point() + scale_y_continuous(limits=c(100,300))
источник