wake-up-neo.com

R ggplot - Fehler stat_bin erfordert eine kontinuierliche Variable x

Meine Tabelle ist data.com mit folgender Struktur:

'data.frame':   1309 obs. of  12 variables:
 $ Survived: Factor w/ 3 levels "0","1","None": 1 2 2 2 1 1 1 1 2 2 ...
 $ Pclass  : Factor w/ 3 levels "1","2","3": 3 1 3 1 3 3 1 3 3 2 ...
 $ Name    : Factor w/ 1307 levels "Abbing, Mr. Anthony",..: 109 191 358 277 16 559 520 629 417 581 ...
 $ Sex     : num  2 1 1 1 2 2 2 2 1 1 ...
 $ Age     : num  22 38 26 35 35 NA 54 2 27 14 ...
 $ SibSp   : int  1 1 0 1 0 0 0 3 0 1 ...
 $ Parch   : int  0 0 0 0 0 0 0 1 2 0 ...
 $ Ticket  : Factor w/ 929 levels "110152","110413",..: 524 597 670 50 473 276 86 396 345 133 ...
 $ Fare    : num  7.25 71.28 7.92 53.1 8.05 ...
 $ Cabin   : Factor w/ 187 levels "","A10","A14",..: 1 83 1 57 1 1 131 1 1 1 ...
 $ Embarked: Factor w/ 4 levels "","C","Q","S": 4 2 4 4 4 3 4 4 4 2 ...
 $ Title   : Factor w/ 4 levels "Master.","Miss.",..: 3 3 2 3 3 3 3 1 3 3 ...

Ich möchte ein Diagramm zeichnen, das die Beziehung zwischen Titel und Überlebenden widerspiegelt, kategorisiert nach Pclass. Ich habe folgenden Code verwendet:

  ggplot(data.combined[1:891,], aes(x=Title, fill = Survived)) +
  geom_histogram(binwidth = 0.5) +
  facet_wrap(~Pclass) +
  ggtitle ("Pclass") +
  xlab("Title") +
  ylab("Total count") +
  labs(fill = "Survived")

Dies führt jedoch zu einem Fehler: Error: StatBin requires a continuous x variable the x variable is discrete. Perhaps you want stat="count"?

Wenn ich die Variable Title in numeric: data.combined$Title <- as.numeric(data.combined$Title) ändere, funktioniert der Code, aber die Beschriftung im Diagramm ist ebenfalls numerisch (unten). Bitte sag mir, warum es passiert und wie man es reparieren kann. Vielen Dank.

Übrigens, ich verwende R 3.2.3 auf Mac El Capital.

Grafik: Anstelle von Herrn, Frau, Frau zeigt die X-Achse die numerischen Werte 1,2,3,4

 enter image description here

12
Kha Nguyen

Fassen Sie die Antwort aus den obigen Kommentaren zusammen:

1 - Ersetzen Sie geom_histogram(binwidth=0.5) durch geom_bar(). Auf diese Weise ist jedoch keine Anpassung der Binwidth möglich.

2 - Die Verwendung von stat_count(width = 0.5) anstelle von geom_bar() oder geom_histogram(binwidth = 0.5) würde das Problem lösen.

15
Kha Nguyen

 graph

extractTitle <- function(Name) {     
Name <- as.character(Name) 

  if (length(grep("Miss.", Name)) > 0) { 
    return ("Miss.")
  } else if (length(grep("Master.", Name)) > 0) { 
    return ("Master.") 
  } else if (length(grep("Mrs.", Name)) > 0) { 
    return ("Mrs.") 
  } else if (length(grep("Mr.", Name)) > 0) { 
    return ("Mr.") 
 } else { 
    return ("Other") 
  } 
}

titles <- NULL 

for (i in 1:nrow(data.combined)){
  titles <- c(titles, extractTitle(data.combined[i, "Name"]))
}

data.combined$title <- as.factor(titles)

ggplot(data.combined[1:892,], aes(x = title, fill = Survived))+
       geom_bar(width = 0.5) +
        facet_wrap("Pclass")+
         xlab("Pclass")+
         ylab("total count")+
         labs(fill = "Survived")  
2
Deepak Harish

Wie oben angegeben, verwenden Sie geom_bar () anstelle von geom_histogram. Siehe Beispielcode (ich wollte für jeden Monat einen separaten Graphen für Geburtsdaten): 

ggplot(data = pf,aes(x=dob_day))+
geom_bar()+
scale_x_discrete(breaks = 1:31)+
facet_wrap(~dob_month,ncol = 3)
1
user5486263

Ich hatte das gleiche Problem, aber keine der oben genannten Lösungen funktionierte. Dann fiel mir auf, dass die Spalte des Datenrahmens, die ich für das Histogramm verwenden wollte, nicht numerisch war:

df$variable<- as.numeric(as.character(df$variable))

Aus hier

0
Ben