2017-06-27 2 views
0

Ich habe ein Grundstück wie folgt aus:Etikett und Farbe für den NA-Wert in ggplot geom_bar ändern?

data <- data.frame(time = c("time1", "time2", "time1"), 
        sex = c("m", "f", NA)) 

ggplot(data = data) + 
    geom_bar(aes(x = time, y = (..count..)/sum(..count..), 
       fill = sex), 
      position = "fill") + 
    scale_y_continuous(name = "percentation", 
        labels = scales::percent) 

und ich versuche, das Etikett und die Farbe des NA-Wert zu ändern. Ich benutzte scale_fill_manual wie das Hinzufügen von

scale_fill_manual(labels = c("m" = "male", 
           "f" = "female", 
           "NA" = "unknown"), 
        values = c("m" = "blue", 
           "f" = "red", 
           "NA" = "green")) 

Leider dies nicht funktioniert, so dass ich möchte fragen, ob hier jemand kann mir bei dem Problem helfen? Gibt es ein spezielles Wort oder etwas für die Auswahl der NA-Werte? Zusätzlich möchte ich die direkte Zuordnung beibehalten, wie "m" = "male" und nicht nur "male" schreiben, um die Zuordnung zu steuern.

+0

Welchen Teil nicht funktioniert? Die Farbe oder das Etikett? Wenn Sie die Funktion 'scal_fill_manual' überprüfen, können Sie sehen, dass ein Argument namens 'na.value' vorhanden ist, für das Sie die gewünschte Farbe angeben können. –

+0

Das stimmt, danke. Aber ich möchte sowohl das Etikett als auch die Farbe ändern. – user5514978

Antwort

0

Die folgende arbeitet für mich:

data <- data.frame(time = c("time1", "time2", "time1"), 
        sex = c("m", "f", NA)) 
data$sex = as.character(data$sex) 

data$sex[is.na(data$sex)] <- "Unknown" 


ggplot(data = data) + 
    geom_bar(aes(x = time, y = (..count..)/sum(..count..), 
       fill = sex), 
      position = "fill") + 
    scale_y_continuous(name = "percentation", 
        labels = scales::percent) 

enter image description here

Ich bin nicht sicher, ob Sie direkt das tun kann. So NA etwas konvertiert zuerst, dann können Sie Ihren Code hinzufügen:

scale_fill_manual(labels = c("m" = "male", 
           "f" = "female", 
           "Unknown" = "unknown"), 
        values = c("m" = "blue", 
           "f" = "red", 
           "Unknown" = "green")) 
+0

Danke dir, das ist definitiv eine Lösung für meine Frage. Aber ich frage mich, ob es auch eine Option gibt, das Label direkt im ggplot-call zu ändern? Hintergrund ist, dass ich viele Variablen habe und ich möchte den Namen im Plot nicht für jede Variable in meinen Daten ändern. – user5514978

+0

Ich habe meine Antwort bearbeitet – AK88

+0

Vielleicht verwenden Sie 'forcats :: fct_explicit_na()' – Axeman

Verwandte Themen