2016-05-15 7 views
0

Ich möchte vermeiden, dass in meinem Plot Faktorvariablen addiert werden. Betrachten wir diese Daten,ggplot: Vermeidung der Addition von Faktorvariablen in der x-Achse

aa <- c(10, 12, 23) 
bb <- c("a", "b", "a") 
dataf <- data.frame(aa, bb) 

library(ggplot2) 
gplot <- ggplot(data=dataf, aes(x=bb, y=aa))+geom_bar(stat="identity") 
gplot 

Dieser Code generiert das folgende Barplot.

enter image description here

Wie man sieht, gibt es zwei Stangen und der Wert des ersten Strichs in y-Achse 33 (d.h. 10 + 23). Ich möchte diesen Zusatz vermeiden. Das heißt, ich möchte drei statt zwei Balken sehen. Wie kann ich das machen?

Antwort

3

Sie können eine neue Spalte erstellen, die die einzigartigen Werte innerhalb jeder Gruppe identifiziert:

dataf$rn <- ave(dataf$aa, dataf$bb, FUN = seq_len) 

und dann Plot:

ggplot(data=dataf, aes(x=bb, y=aa, fill=factor(rn))) + 
    geom_bar(stat="identity", position="dodge") 

die gibt:

enter image description here

jedoch , da dies keine schöne Handlung in Bezug auf die Wid th der Stäbe, können Sie Ihre Datenrahmen erweitern wie folgt:

# expand the dataframe such that all the combinations of 'bb' and 'rn' are present 
dfnew <- merge(expand.grid(bb=unique(dataf$bb), rn=unique(dataf$rn)), dataf, by = c('bb','rn'), all.x = TRUE) 
# replace the NA's with zero's (not necessary) 
dfnew[is.na(dfnew$aa),'aa'] <- 0 

und dann wieder Grundstück:

ggplot(data=dfnew, aes(x=bb, y=aa, fill=factor(rn))) + 
    geom_bar(stat="identity", position="dodge") 

die gibt:

enter image description here


In reponse zu Ihr Kommentar, könnten Sie tun:

dataf$rn2 <- 1:nrow(dataf) 

ggplot(data=dataf, aes(x=factor(rn2), y=aa)) + 
    geom_bar(stat="identity", position="dodge") + 
    scale_x_discrete('', labels = dataf$bb) 

die gibt:

enter image description here

+0

Vielen Dank für Ihre Antwort. Was ich suche, sind drei gleichmäßig platzierte Spalten mit den Werten (a, b, a) auf der Unterseite. Ich sehe in deinem Ergebnis, dass es nicht der Fall ist. a befindet sich in der Mitte der ersten beiden Balken und b befindet sich nicht in der Mitte des unteren Balkens. –

+0

@HaseebMahmud Siehe das Update, HTH. – Jaap

Verwandte Themen