2013-04-24 22 views
6

Aynı grafiği, ara sütunun ara hesaplaması olmadan nasıl alabilirim.Miktar kümelenmesinin ara adımı olmadan aynı grafiği nasıl alabilirim?

Bu veriler var:

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

bu kodu kullanarak, bir barplot olsun. Her bir bar, aile ve ay bazında toplam tutardır. önce yeni bir aggegate sütun V1 oluşturun.

## 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)] 

Sonra bu kodu kullanarak çizmek:

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

bu arsa almak için: Bu çalışır ama basit bir yöntem istiyorum

enter image description here

. Ben stat_sum veya diğer ggplot2 teknikleri kullanarak düşünüyorum, bu ara toplama adımı olmadan yapabilirsiniz. Böyle bir şey:

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

cevap

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

! güzel ve basit teşekkürler! belki biraz açıklama ekleyebilirsiniz ... grup aes gerekmez gibi görünüyor ... – agstudy

+0

Siparişi doğru almak için gruba ihtiyacınız var. Neden emin değilim ve ggplot2'nin başlık altında ne yaptığını bulamıyorum. – Roland

4

Ben yığılmış çubuk grafikler üretiminde count yerine belirli değerlerin toplamını elde etmek için kullanılabilecek daha bir argüman weight= olduğu R help mailing list üzerinde bulduk. x değerlerini, fill= değerlerini ve weight=amount tedarik etmelisiniz, amount değerlerinin toplamının bar yükseklikleri yapmak için kullanılmasını sağlar. Bu ayrıca otomatik olarak fill= değerlerinin aynı sırayla düzenlenmesini sağlar. Cevap

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

enter image description here

+0

+1 iyi! Daha genel göründüğünden öteki cevabı kontrol ediyorum (ortalama ya da ortanca olabilir) ... – agstudy

+1

@agstudy Sorun yok! Genellik konusunda haklısınız. –

İlgili konular