ggplot2 경고 설명 :“결 측값이 포함 된 k 개의 행이 제거되었습니다.”


89

을 사용하여 플롯을 생성하려고 할 때이 경고가 표시됩니다 ggplot.

한동안 온라인에서 조사한 후 많은 사람들이 내 데이터베이스에 null 값이 있거나 일반적으로 누락 된 데이터가 있다고 제안했지만 그렇지 않았습니다.

이 질문 에서 허용되는 답변은 다음과 같습니다.

경고는 일부 요소가 지정된 범위를 벗어나기 때문에 제거되었음을 의미합니다.

이 범위가 정확히 무엇을 참조하고 모든 경고를 피하기 위해 수동으로이 범위를 어떻게 늘릴 수 있는지 궁금합니다.


5
y그 질문 의 축 에는 한계가 있습니다 . 이 기능 때문에 값은 0에서 0.12 사이로 제한됩니다.ylim(0,0.12)
LyzandeR

1
재현 가능한 예가 질문에 답하는 데 도움이 될 것입니다. @LyzandeR이 올바른 길을 가고있는 것 같습니다.
vpipkt 2015 년

답변:


85

표시되는 동작 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_continuousy 축 범위를 설정하는 데 사용했기 때문에이 점은 선형 회귀선과 같이 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.

충돌은 내가 정의한 x 축에서 발생했습니다 limits = c(1, 30). 막대를 "회피"하려는 경우 이러한 제한이 충분한 공간을 제공하지 않는 것 같으므로 R은 여전히 ​​오류를 발생시킵니다.

누락 된 값이 포함 된 행 8 개 제거 (geom_bar)

x 축의 한계를 조정하여 limits = c(0, 31)문제 를 해결했습니다.

결론적으로, y 축에 제한을 두지 않더라도 x 축 동작을 확인하여 충분한 공간이 있는지 확인하십시오.


이것은 너무 자주 놓친다. 같은 사람 이요 잠시 후 다시 ... 한숨 감사합니다!
Genom

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).

reprex 패키지 (v0.3.0)로 2020-08-24에 생성됨


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))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.