2011-06-23 20 views
35

Mi piacerebbe avere alcune etichette impilate su un grafico geom_bar. Ecco un esempio:Come mettere le etichette su geom_bar in R con ggplot2

df <- data.frame(x=factor(c(TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE))) 
ggplot(df) + geom_bar(aes(x,fill=x)) + opts(axis.text.x=theme_blank(),axis.ticks=theme_blank(),axis.title.x=theme_blank(),legend.title=theme_blank(),axis.title.y=theme_blank()) 

Ora

tavolo (df $ x)

FALSE TRUE 
    3  5 

Mi piacerebbe avere il 3 e 5 sulla parte superiore delle due barre. Ancora meglio se potessi avere anche i valori percentuali. Per esempio. 3 (37.5%) e 5 (62.5%). Così:

È possibile? Se é cosi, come?

+2

L'aggiunta di numeri o testo nella parte superiore delle barre distorce il modo in cui l'occhio vede il confronto in altezza. Vedi [questa discussione] (http://tolstoy.newcastle.edu.au/R/e2/help/07/08/22858.html) su R-help. –

risposta

28

Come per molti compiti in ggplot, la strategia generale è quella di inserire ciò che si desidera aggiungere alla trama in un frame di dati in modo tale che le variabili corrispondano alle variabili e all'estetica della trama. Così, per esempio, devi creare una nuova cornice di dati in questo modo:

dfTab <- as.data.frame(table(df)) 
colnames(dfTab)[1] <- "x" 
dfTab$lab <- as.character(100 * dfTab$Freq/sum(dfTab$Freq)) 

in modo che la variabile x corrisponde alla variabile corrispondente df, e così via. Quindi è sufficiente includere utilizzando geom_text:

ggplot(df) + geom_bar(aes(x,fill=x)) + 
    geom_text(data=dfTab,aes(x=x,y=Freq,label=lab),vjust=0) + 
    opts(axis.text.x=theme_blank(),axis.ticks=theme_blank(), 
     axis.title.x=theme_blank(),legend.title=theme_blank(), 
     axis.title.y=theme_blank()) 

questo esempio tracciare solo le percentuali, ma è possibile paste insieme i conteggi così via qualcosa di simile:

dfTab$lab <- paste(dfTab$Freq,paste("(",dfTab$lab,"%)",sep=""),sep=" ") 

Si noti che nella versione attuale di ggplot2, opts è deprecato, quindi useremmo theme e element_blank ora.

36

Per tracciare il testo su un ggplot si utilizza il geom_text. Ma trovo utile per riassumere i dati di primo utilizzo ddply

dfl <- ddply(df, .(x), summarize, y=length(x)) 
str(dfl) 

Dal momento che i dati sono pre-sintetizzato, è necessario ricordarsi di modificare aggiungere il stat="identity" parametro geom_bar:

ggplot(dfl, aes(x, y=y, fill=x)) + geom_bar(stat="identity") + 
    geom_text(aes(label=y), vjust=0) + 
    opts(axis.text.x=theme_blank(), 
     axis.ticks=theme_blank(), 
     axis.title.x=theme_blank(), 
     legend.title=theme_blank(), 
     axis.title.y=theme_blank() 
) 

enter image description here

Problemi correlati