2012-04-13 20 views
12

ggplot2 kullanma Yatay eksende bir faktöre sahip histogram oluşturuyorum ve doldurulmuş bir renk kullanarak dolgu rengi için başka bir faktör oluşturuyorum. Benim problemim, doldurma faktörünün bazen yatay faktörün bir değeri için sadece bir değer alması ve çubuğun atlatılması için hiçbir şeyin tam genişliği almamasıdır. Tüm çubuk genişliklerinin aynı olması için hiçbir şeyi atlatmamasının bir yolu var mı? Ya da 0'ları çizmek için eşdeğer mi? Her zaman bir histogramı atlatmanın bir yolu?

enter image description here

This answer

ggplot(data = mtcars, aes(x = factor(carb), fill = factor(gear))) + 
geom_histogram(position = "dodge") 
Örneğin

için

birkaç fikirleri vardır. Yeni versiyonun yayınlanmasından önce de sorulmuştu, bu yüzden belki bir şeyler değişti? Durumları kullanarak (ben de here gösterilen) benim durumumdan hoşlanmıyorum, ama ben veri düzenleme ve geom_bar kullanarak işe yaramazsa, ama inelegant hissediyor. Dahası, çalışırken yine

ggplot(mtcars, aes(x = factor(carb), fill = factor(gear))) + 
    geom_bar() + facet_grid(~factor(carb)) 

hatasını almak facetting "layout_base içinde hata (veriler, sütunlar, damla = damla): facetting için kullanılan tüm değişkenler içermelidir en az bir kat"

I I 0 en mevcut değildir seviyeleri doldurarak,

mtcounts <- ddply(subset(mtcars, select = c("carb", "gear")), 
    .fun = count, .variables = c("carb", "gear")) 

sayımlık bir veri çerçevesini oluşturmak ve daha sonra geom_bar kullanabilir varsayalım. Bunun işe yarayacağını ya da daha iyi bir yolu olup olmadığını bilen var mı?

+2

Sana ideal düşünmüyoruz biliyorum, ama sayıları önceden hesaplanması ve bunu yapmanın benim tercih yol olacaktır geom_bar kullanarak düşünüyorum. – joran

cevap

11

Güncellemegeom_bar ihtiyaçları stat = "identity"

bunun senin için çok geç olup olmadığından emin değilim, ama here , ben Joran tavsiyesine alırdım son bir yazı cevabına bakınız önceden hesapla ggplot numaralı telefonun dışındaki numaralar ve geom_bar numaralı telefonu kullanmak. Diğer yazıya verilen cevapta olduğu gibi, sayımlar iki aşamada elde edilir: ilk olarak, sayımların bir çaprazlaması dcast; sonra ikinci, melt çapraz bağlama.

library(ggplot2) 
library(reshape2) 

dat = dcast(mtcars, factor(carb) ~ factor(gear), fun.aggregate = length) 
dat.melt = melt(dat, id.vars = "factor(carb)", measure.vars = c("3", "4", "5")) 
dat.melt 

(p <- ggplot(dat.melt, aes(x = `factor(carb)`, y = value, fill = variable)) + 
    geom_bar(stat = "identity", position = "dodge")) 

grafik:

enter image description here

+0

Son sonuç görüntüsünü de eklemek ister misiniz? –

+0

Grafiği ekledim ve yanıtı netleştirmek için birkaç değişiklik yaptı. –

+0

Asla çok geç değil! Bu yorumu tam bir cevaba dönüştürdüğünüz için teşekkür ederiz. – Gregor

İlgili konular