NA ' s werden dargestellt in boxplots ggplot2
Ich versuche, die Handlung ein v. einfaches boxplot in ggplot2. Ich habe Artenreichtum vs. Landnutzung-Klasse. Allerdings habe ich 2 NA ' s in meinen Daten. Aus irgendeinem seltsamen Grund, Sie sind gezeichnet, auch wenn Sie verstanden, wie NA ' s durch R. Jede Anregung, um Sie zu entfernen?
Den code, den ich verwende, ist:
ggplot(data, aes(x=luse, y=rich))+
geom_boxplot(mapping = NULL, data = NULL, stat = "boxplot", position = "dodge", outlier.colour = "red", outlier.shape = 16, outlier.size = 2, notch = F, notchwidth = 0.5)+
scale_x_discrete("luse", drop=T)+
geom_smooth(method="loess",aes(group=1))
Jedoch, dass der graph enthält 2 NA ' s für die luse. Leider kann ich keine Bilder hochladen, aber vorstellen, dass ein NA-Leiste Hinzugefügt wird mein graph.
ggplot(na.omit(data), aes(x=luse, y=rich)) + ...
- Vielen Dank dafür!
- Für einen allgemeineren Fall: wenn in den Daten Variablen enthalten, anders als die beiden gezeichnet,
na.omit(data)
entfernen Beobachtungen mit missings auf eine variable. Dies kann unbeabsichtigte Folgen haben, für Ihre Diagramme und/oder Analyse. Könnte mandata=na.omit(data[,c("var1","var2",...)])
, wo var1, var2, ... sind die Variablen, die Sie für Ihr Diagramm. - +1 für @Maxim.K, ich lief in genau dieses problem mit einem großen data frame, in dem eine der Variablen hatte einen extrem hohen Anteil von NA-Werte. Ich konnte nicht das ganze Training in der syntax, um einfach loszuwerden, die NA in meine variable von Interesse. Aber beachten Sie, wenn Sie interessiert sind, nur eine variable, wie ich war, die obigen code wird ein Vektor müssen Sie mindestens 2-Spalten in den Daten.Rahmen, damit es funktioniert, wie es geschrieben ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie versuchen, zu verwenden, die
subset()
Funktion in der ersten Zeile des Codeswie vorgeschlagen in: Die Beseitigung NAs von einem ggplot
Können Sie auch die
filter()
Funktion in dplyr/tidyverse:Diese Weise werden Sie nicht haben, um ein neues Objekt erstellen.
! is.na()
statt ? Oder wollen Sie all die NA ' s? 😉 Auch muss man nicht unbedingt angeben müssenis.na (x) == TRUE
, denn es wertet einen logischen Vektor sowieso, die dann verwendet werdenfilter()
.... P. S. willkommen SOFis.na()
direkt.Hier ist eine formale Antwort mit dem Kommentar oben zu integrieren
!is.na()
mitfilter()
aus tidyverse/dplyr. Wenn Sie eine einfache tidyverse Betrieb wie die Filterung NAs, können Sie es tun Recht in derggplot
nennen, wie vorgeschlagen, um zu vermeiden, dass Sie einen neuen data frame:ggplot(data %>% filter(!is.na(luse)), aes(x = luse, y = rich)) + geom_boxplot()
is.na() == FALSE
oder Untergruppen, die sind weniger direktsubset
weniger direkt? Auch Sie sind mit Rohr, die hat nichts zu tun mit dieser Frage.