2015-12-23 13 views
9

My tabeli data.combined o następującej strukturze:R ggplot - błąd stat_bin wymaga bezstopniowej X

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

że chce wyciągnąć wykres odzwierciedla zależność między tytułem i przeżył, w podziale na Pclass. Użyłem poniższy kod:

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

Jednak to powoduje błąd: Error: StatBin requires a continuous x variable the x variable is discrete. Perhaps you want stat="count"?

Jeśli zmienić zmienną tytuł na numeryczny: data.combined$Title <- as.numeric(data.combined$Title) następnie prace kod, ale etykieta na wykresie jest również numeryczny (poniżej). Powiedz mi, dlaczego tak się dzieje i jak to naprawić. Dzięki.

Btw, używam R 3.2.3 na Mac El Capital.

Wykres: Zamiast pana, pani, pani osi x przedstawia wartości numeryczne 1,2,3,4

enter image description here

+0

A [ odtwarzalny przykład] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) byłoby tutaj świetne. –

+0

Prawdopodobnie także twoja wersja ggplot (patrz 'sessionInfo()'), ponieważ moja wersja (1.0.1) nie ma statystyk = "count". Czy wypróbowałeś 'stat =" count "' tak jak mówi komunikat o błędzie (zachowując swój "Tytuł" jako czynnik)? –

+0

Dzięki mathematical.coffee, właśnie zaktualizowałem trochę więcej informacji na moje pytanie. Używam ggplot2_2.0.0, czy to w porządku? –

Odpowiedz

11

Podsumowując odpowiedź z powyższych uwag:

1 - Wymień geom_histogram(binwidth=0.5) na geom_bar(). Jednak w ten sposób nie można dostosowywać binarki.

2 - Użycie stat_count(width = 0.5) zamiast geom_bar() lub geom_histogram(binwidth = 0.5) rozwiąże to.

-1

Jak stwierdzono powyżej użytku geom_bar() zamiast geom_histogram, odnoszą przykładowy kod podany poniżej (chciałem osobny wykres dla każdego miesiąca dla danych data urodzenia):

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

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") 
Powiązane problemy