Поясніть попередження ggplot2: “Видалено k рядків, що містять відсутні значення”


89

Я отримую це попередження, коли намагаюся створити сюжет за допомогою ggplot.

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

У цьому питанні прийнята відповідь говорить наступне:

Попередження означає, що деякі елементи видаляються, оскільки вони випадають із зазначеного діапазону

Мені було цікаво, до чого саме відноситься цей діапазон, і як хтось може вручну збільшити цей діапазон, щоб уникнути всіх попереджень?


5
Існує обмеження на yвісь цього питання. Значення обмежені між 0 і 0,12 через цю функцію:ylim(0,0.12)
LyzandeR

1
Повторний приклад допоможе відповісти на запитання. @LyzandeR, схоже, йде правильним шляхом.
vpipkt

Відповіді:


84

Поведінка, яку ви бачите, пов’язана з тим, як 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")

11

Лише для тряски, яка доповнює відповідь eipi10.

Я стикався з тією ж проблемою, не використовуючи scale_y_continuousні coord_cartesian.

Конфлікт йшов від осі х, де я визначив limits = c(1, 30). Здається, такі обмеження не дають достатньо місця, якщо ви хочете "ухилитися" від своїх барів, тому R все одно видає помилку

Видалено 8 рядків, що містять відсутні значення (geom_bar)

Налаштування меж осі х для limits = c(0, 31)вирішення проблеми.

На закінчення, навіть якщо ви не встановлюєте обмежень для своєї осі y, перевірте поведінку своєї осі x, щоб забезпечити вам достатньо місця


Це так часто пропускають. Тією ж людиною. Знову через деякий час ... зітхай Дякую!
Геном

1

Навіть якщо ваші дані потрапляють у вказані вами обмеження (наприклад 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).

Створено 2020-08-24 пакетом reprex (v0.3.0)


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))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.