Erläutern Sie die Warnung ggplot2: "k Zeilen mit fehlenden Werten entfernt"

87

Ich erhalte diese Warnung, wenn ich versuche, einen Plot mit zu erstellen ggplot.

Nachdem ich eine Weile online recherchiert hatte, schlugen viele vor, dass meine Datenbank entweder Nullwerte oder fehlende Daten im Allgemeinen enthält, was nicht der Fall war.

In dieser Frage lautet die akzeptierte Antwort wie folgt:

Die Warnung bedeutet, dass einige Elemente entfernt werden, weil sie außerhalb des angegebenen Bereichs liegen

Ich habe mich gefragt, worauf sich dieser Bereich genau bezieht und wie jemand diesen Bereich manuell erhöhen kann, um alle Warnungen zu vermeiden.

ksm001
quelle
5
In ydieser Frage gibt es eine Begrenzung für die Achse. Die Werte sind aufgrund dieser Funktion zwischen 0 und 0,12 begrenzt:ylim(0,0.12)
LyzandeR
1
Ein reproduzierbares Beispiel würde helfen, die Frage zu beantworten. @ LyzandeR scheint den richtigen Weg zu gehen.
vpipkt

Antworten:

80

Das angezeigte Verhalten hängt davon ab, wie ggplot2mit Daten umgegangen wird , die außerhalb der Achsenbereiche des Diagramms liegen. Sie können dieses Verhalten ändern, je nachdem, ob Sie Achsenbereiche verwenden scale_y_continuous(oder gleichwertig ylim) oder coord_cartesianfestlegen, wie unten erläutert.

library(ggplot2)

# All points are visible in the plot
ggplot(mtcars, aes(mpg, hp)) + 
  geom_point()

Im folgenden Code liegt ein Punkt mit hp = 335 außerhalb des y-Bereichs des Diagramms. Da wir scale_y_continuousden Bereich der y-Achse festgelegt haben, ist dieser Punkt auch nicht in anderen Statistiken oder zusammenfassenden Kennzahlen enthalten, die von ggplot berechnet wurden, z. B. der linearen Regressionslinie.

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

Im folgenden Code liegt der Punkt mit hp = 335 immer noch außerhalb des y-Bereichs des Diagramms. Dieser Punkt ist jedoch in allen Statistiken oder zusammenfassenden Kennzahlen enthalten, die von ggplot berechnet werden, z. B. der linearen Regressionslinie. Dies liegt daran, dass wir coord_cartesianden Bereich der y-Achse festgelegt haben und diese Funktion Punkte, die außerhalb der Plotbereiche liegen, nicht ausschließt, wenn andere Berechnungen für die Daten durchgeführt werden.

Wenn Sie dieses und das vorherige Diagramm vergleichen, können Sie sehen, dass die lineare Regressionslinie im zweiten Diagramm eine etwas steilere Steigung aufweist, da der Punkt mit hp = 335 bei der Berechnung der Regressionslinie berücksichtigt wird, obwohl er im Diagramm nicht sichtbar ist .

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

Nur für den Shake, der die Antwort von eipi10 vervollständigt.

Ich hatte das gleiche Problem, ohne scale_y_continuousnoch zu verwenden coord_cartesian.

Der Konflikt kam von der x-Achse, wo ich definiert habe limits = c(1, 30). Es scheint, dass solche Grenzwerte nicht genügend Platz bieten, wenn Sie Ihren Balken "ausweichen" möchten, sodass R immer noch den Fehler auslöst

8 Zeilen mit fehlenden Werten entfernt (geom_bar)

Anpassen der Grenzen der x-Achse, um limits = c(0, 31)das Problem zu lösen.

Selbst wenn Sie Ihrer y-Achse keine Grenzen setzen, sollten Sie das Verhalten Ihrer x-Achse überprüfen, um sicherzustellen, dass Sie genügend Platz haben

Davidnortes
quelle
Dies wird so oft übersehen. Von derselben Person. Wieder nach einiger Zeit ... seufz Danke!
Genom
0

Selbst wenn Ihre Daten innerhalb der angegebenen Grenzen liegen (z. B. c(0, 335)), kann das Hinzufügen einer geom_jitter()Anweisung einige Punkte außerhalb dieser Grenzen verschieben und dieselbe Fehlermeldung erzeugen.

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

Erstellt am 24.08.2018 durch das reprex-Paket (v0.3.0)

Todd
quelle