2013-04-24 8 views
6

Come posso ottenere lo stesso grafico senza il calcolo intermedio della colonna aggregata.Come posso ottenere lo stesso grafico senza il passaggio intermedio dell'ammontare?

ho questi dati:

set.seed(1234) 
dat <- data.frame(month = gl(3,1,20), 
        family= gl(5,1,20), 
        amount= sample(1:3,20,rep=TRUE)) 

Utilizzando questo codice, ottengo un barplot. Dove ogni barra è la somma dell'importo per famiglia e per mese. prima creo una nuova colonna aggegata V1.

## I am using data.table , you can get it by ddply also 
library(data.table) 
dd <- data.table(dat) 
hh <- dd[,sum(amount),by=list(month,family)] 

Poi ho tracciare utilizzando questo codice:

ggplot(data=hh,aes(x=month,y=V1,fill=family))+ 
    geom_bar(stat = "identity") 

Per ottenere questa trama:

enter image description here

Questo funziona ma voglio metodo più semplice. Penso che usando le tecniche stat_sum o altre tecniche ggplot2 posso farlo senza il passaggio di aggregazione intermedio. qualcosa di simile:

## don't run this doesn't work 
ggplot(data=dat,aes(x=month,y=amount,fill=family))+ 
    geom_bar(stat = "sum") 

risposta

7
ggplot(data=dat,aes(x=month,y=amount,fill=family,group=family))+ 
    geom_bar(stat = "summary",fun.y=sum) 

enter image description here

+0

! grazie carini e semplici! forse puoi aggiungere qualche spiegazione ... sembra che tu non abbia bisogno del gruppo di aes ... – agstudy

+0

Hai bisogno del gruppo per ottenere l'ordine corretto. Non sono sicuro del perché e non sono in grado di scoprire cosa ggplot2 fa sotto il cofano. – Roland

4

ho trovato su R help mailing list che c'è un argomento weight= che può essere utilizzato per ottenere somma dei valori particolari, invece di conteggio nella produzione di grafici a barre in pila. È necessario fornire i valori x, i valori fill= e weight=amount assicura che la somma dei valori amount venga utilizzata per aumentare le altezze delle barre. Ciò garantisce automaticamente che i valori fill= siano disposti nello stesso ordine.

ggplot(dat,aes(month,fill=family,weight=amount))+geom_bar() 

enter image description here

+0

+1 buona risposta! Controllo l'altra risposta poiché sembra più generica (può essere media o mediana) ... – agstudy

+1

@agstudy Nessun problema! Hai ragione riguardo alla generalità. –