2010-09-01 22 views
20

Ggplot2 bir acemi değilim ve istiflenmiş bir çubuk arsa oluşturma hakkında bir sorum var. Kitabı ve özel web sayfasını kontrol ettim, ancak sorunu çözemedim. İki seviyem var, bunlardan biri 2 seviyesi (varlık yokluğu), diğer 10 seviyesi. Bu iki "değişken" ve "meyve" diyoruz.Y ekseni ile R (ggplot2) yığılmış çubuk grafik ve sayılar yüzdesi olarak

Her çubuğun bir tür meyve yansıttığı ve "değişken" in varlık yokluğu gözlemlerinin sayısının birbirinin üzerine yığıldığı istiflenmiş bir çubuk grafiği oluşturmak istiyorum. Bu nispeten kolaydır (aşağıdaki çizim için kod 1'e bakın), fakat aynı zamanda çubukların ve y ekseninin, bir "değişken" içindeki varlık yokluğu sayısını yüzde olarak ifade etmesini de istiyorum. Diğer bir deyişle, tüm çubuklar aynı yükseklikte olmalıdır (toplam% 100'ü yansıtır) ve yokluk gözlemlerinin sayısı yüzdelere dönüştürülmelidir.

Y ekseni ölçeğini ..count .. * 100/sum (.. count ..) kullanarak bir yüzdeye değiştirebilirim ancak gerçek çubukları nasıl dönüştüreceğimi açıklayamıyorum. Yüzdelik olarak ne istediğimi elde eden bir yüz ifadesiyle (aşağıdaki 2 numaralı çizim için kod) başka bir komplo oluşturdum ama iki çubuğun üst üste olmasını tercih ediyorum. Bunu nasıl başaracağına dair bir fikri olan var mı? Sahte veri ve tekrarlanabilir örnek verdim. Herhangi bir yardım için teşekkürler. İlk grafiğinde

Steve

dat <- data.frame(fruit=c("Apple", "Apple", "Orange", "Orange", "Orange", "Orange", 
        "Orange", "Pear", "Pear", "Pear"), variable=c("Present", "Absent", 
        "Present", "Present", "Present", "Present", "Absent", "Absent", 
        "Absent", "Present")) 

# stacked bar plot 
ggplot(dat, aes(x = fruit, fill = variable)) + 
    geom_bar(aes(y = ..count..*100/sum(..count..))) + 
    xlab("Fruit") + 
    ylab("Would like this to be percentage") + 
    scale_fill_manual("Condition", values = alpha(c("firebrick", "dodgerblue4"), 1)) 

enter image description here

# with faceting 
ggplot(dat, aes(x = variable, fill = variable)) + 
    geom_bar(aes(y = ..count..*100/sum(..count..))) + 
    facet_grid(. ~ fruit) + 
    xlab("Fruit") + 
    ylab("Would like this to be percentage") + 
    scale_fill_manual("Condition", values = alpha(c("firebrick", "dodgerblue4"), 1)) 

enter image description here

cevap

24

, sadece geom_bar hattına pozisyon = 'dolgu' ekleyin!. Ggplot'un otomatik olarak yapmanın bir yolu olduğu için sayıları gerçekten ölçeklemeniz gerekmez.

ggplot(dat, aes(x = fruit)) + geom_bar(aes(fill = variable), position = 'fill') 
+0

Teşekkürler Ramnath, barlar için tam olarak ihtiyacım olan şey bu. Ancak bunu yaptığımda y ekseni etiketleri 0 ile 1 arasında bir ölçeğe döner. 0'dan 100'e kadar olmasını istiyorum. Y = ..counts .. * 100 veya y = ..density .. * 100 dahil olmak üzere "aes" in çalıştığı görünmüyor. Herhangi bir fikir? – Steve

+4

'+ scale_y_continuous (" ", biçimlendirici =" percent ")'. İlk "" "," say "etiketinden kurtulur, ancak istediğiniz herhangi bir etiketi ekleyebilirsiniz. – James

+0

Çok teşekkürler James, bu mükemmel çalışıyor. – Steve

İlgili konular