it-swarm.com.de

NAs werden in Boxplot ggplot2 geplottet

Ich versuche, ein v. Einfaches Boxplot in ggplot2 zu zeichnen. Ich habe Artenreichtum gegen Landnutzungsklasse. Ich habe jedoch 2 NAs in meinen Daten. Aus irgendeinem seltsamen Grund werden sie geplottet, auch wenn sie von R als NAs verstanden werden. Irgendwelche Vorschläge, sie zu entfernen?

Der Code, den ich benutze, 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))

Das Diagramm enthält jedoch 2 NAs für luse. Leider kann ich keine Bilder posten, stelle mir aber vor, dass ein NA-Balken zu meinem Diagramm hinzugefügt wird.

10
R. Solar

Sie können versuchen, die Funktion subset() in der ersten Zeile Ihres Codes zu verwenden

ggplot(data=subset(data, !is.na(luse)), aes(x=luse, y=rich))+

wie vorgeschlagen in: Eliminieren von NAs aus einem ggplot

Hier ist eine formelle Antwort unter Verwendung der obigen Kommentare, um !is.na() mit filter() von tidyverse/dplyr aufzunehmen. Wenn Sie eine grundlegende Tidyverse-Operation haben, wie z. B. das Filtern von NAs, können Sie dies wie vorgeschlagen direkt im ggplot -Aufruf tun, um das Erstellen eines neuen Datenrahmens zu vermeiden:

ggplot(data %>% filter(!is.na(luse)), aes(x = luse, y = rich)) + geom_boxplot()

0
user29609

Sie können die Funktion filter() auch in dplyr/tidyverse verwenden:

data %>% filter(is.na(luse) == FALSE) %>% 
   ggplot(aes(x=luse, y=rich)) +
   geom_boxplot()

Auf diese Weise müssen Sie kein neues Objekt erstellen.

0
Luke McDonald