ggplot2の警告について説明します:「欠落している値を含むk行を削除しました」


89

を使用してプロットを生成しようとすると、この警告が表示されggplotます。

しばらくオンラインで調査した後、多くの人が私のデータベースにnull値または一般的な欠落データが含まれていることを示唆しましたが、そうではありませんでした。

この質問では、受け入れられた答えは次のように述べています。

警告は、一部の要素が指定された範囲外であるために削除されることを意味します

この範囲が正確に何を指しているのか、そしてすべての警告を回避するために誰かがこの範囲を手動で増やすにはどうすればよいのか疑問に思いました。


5
yその質問の軸には制限があります。値があるため、この関数の0と0.12の間で制限されています:ylim(0,0.12)
LyzandeR

1
再現可能な例は、質問に答えるのに役立ちます。@LyzandeRは正しい方向に進んでいるようです。
vpipkt 2015

回答:


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の1つの点がプロットの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軸の範囲を設定していたであり、この関数は、データに対して他の計算を行うときに、プロット範囲外のポイントを除外しません。

このプロットと前のプロットを比較すると、2番目のプロットの線形回帰線の傾きがわずかに急であることがわかります。これは、回帰線の計算時にhp = 335の点が含まれているためですが、プロットには表示されていません。 。

ggplot(mtcars, aes(mpg, hp)) + 
  geom_point() +
  coord_cartesian(ylim=c(0,300)) +
  geom_smooth(method="lm")

11

eipi10によって与えられた答えを完了するシェイクのためだけに。

私はscale_y_continuousnorを使用せずに同じ問題に直面していましたcoord_cartesian

競合は、私が定義したx軸から発生していましたlimits = c(1, 30)。バーを「かわす」場合、このような制限では十分なスペースが提供されないようです。そのため、Rは引き続きエラーをスローします。

欠落している値を含む8行を削除しました(geom_bar)

limits = c(0, 31)問題を解決するためにx軸の制限を調整します。

結論として、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).

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.