2012-06-23 16 views
16

Bir resim bin kelimeden fazla diyor. Gördüğünüz gibi, fill benim variable değişkenine dayanıyor.R ggplot barplot; İki ayrı değişkene göre doldurun

Her çubukta, complexity ayrık değişkeninden bu yana birden çok veri öğesi (siyah kenarlık) vardır, bunları benzersiz kılar. Bulmaya çalıştığım şey, çubuğun her bölümünü mevcut görünümden daha ayrılabilir yapan bir şeydir. Gölgeleme gibi bir şey olsaydı tercih edilirdi. (Orijinal ithal edilmiş olduğu için, değil aynı veri kümesi) İşte

http://s12.postimage.org/ltgs677ul/snapshot2.png

bir örnek:

dat <- read.table(text = "Complexity Method Sens Spec MMC 
1 L Alpha 50 20 10 
2 M Alpha 40 30 80 
3 H Alpha 10 10 5 
4 L Beta 70 50 60 
5 M Beta 49 10 80 
6 H Beta 90 17 48 
7 L Gamma 19 5 93 
8 M Gamma 18 39 4 
9 H Gamma 10 84 74", sep = "", header=T) 

library(ggplot2) 
library(reshape) 
short.m <- melt(dat) 
ggplot(short.m, aes(x=Method, y= value/100 , fill=variable)) + 
    geom_bar(stat="identity",position="dodge", colour="black") + 
    coord_flip() 
+0

bir [tekrarlanabilir örnek] (http ekleyerek alıkoyan bir şey yok: //stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) olsa da :) – Chase

+0

Bir örnek eklendi;) – user1476968

cevap

19

Bu mükemmel olmaktan uzak, ama umarım doğru yönde atılmış bir adımdır, butarafından kurtuldu oluyor olarak, ama yine de bir şekilde Complexity temsil yönetir:

ggplot(short.m, aes(x=Method, y=value/100, group=variable, fill=variable, alpha=Complexity,)) + 
    geom_bar(stat="identity",position="dodge", colour="black") + 
    scale_alpha_manual(values=c(0.1, 0.5, 1)) + 
    coord_flip() 

enter image description here

+0

Kesinlikle mükemmel! Kesinlikle devam etmek için ihtiyacım olan şey. – user1476968

+0

Bu çözümle ilgili tek sorun, çubukların birbiriyle örtüşmemesidir. Alpha Spec'ta aslında bir H çubuğu var, ancak önce çizildiği için tamamen gizlenmiş (H ve M'den önce H geliyor). Alfa değerleri birbirinden de eklendiğinden hangisinin hangisi olduğunu söyleyemez (bkz. Beta Spec). Açıkçası orta çizginin H için olduğunu biliyoruz, ancak okuyucu büyük ihtimalle olmayacak. – user1476968

0

Chase söylediği gibi, bir tekrarlanabilir örnek olmadan emin olmak için, ama alpha=complexity ekleyerek işe yarayabilecek Sert :

ggplot(short.m, aes(x=Method, y= value/100 , fill=variable, alpha=complexity)) + 
geom_bar(stat="identity",position="dodge", colour="black") + coord_flip() 
+0

Bu pazartesi yeniden üretilebilir bir örnek eklemeye çalışıyorum. – user1476968

+0

Alfa kullanmayla ilgili problem (renk kullanımı gibi), çubukların birbirinden ayrılmasıdır. İdeal olarak elde etmeye çalıştığım şey yığılmış alfa (Karmaşıklık) ve ayrıştırılmış değişken (eritilmiş MMC, Sens ve Spec) – user1476968

0

Sen Method ve variable faktörleri ayırmak gerekebilir. İşte yapmanın iki yolu olduğunu:

Kullanım facet_wrap():

ggplot(short.m, aes(x=variable, y=value/100, fill=Complexity)) + 
    facet_wrap(~ Method) + geom_bar(position="stack", colour="black") + 
    scale_alpha_manual(values=c(0.1, 0.5, 1)) + coord_flip() 

kullanın x ekseni üzerinde hem:

ggplot(short.m, aes(x=Method:variable, y=value/100, group=Method, fill=variable, alpha=Complexity,)) + 
    geom_bar(stat="identity", position="stack", colour="black") + 
    scale_alpha_manual(values=c(0.1, 0.5, 1)) + coord_flip() 
+0

Yarın sabah ilk işimi deneyeceğim ve nasıl çalıştığını göreceğim. ;) – user1476968

+0

Bu çözümdeki sorun, çubukları gerçekten yığmaması, onları yalnızca birbirinin üstüne eklenmesidir. Bu iki eşit uzunlukta uzun Spec MC, paralel konumlanmadığı için farklı uzunluklarda görünebilir. – user1476968

+0

Tamam, şimdi ne yapmaya çalıştığını anlıyorum. Ggplot'ta, "yığın", onları birbirinin üzerine eklemek demektir. Bilgime göre, istediğiniz yığın türü ggplot'ta mümkün değildir. Bunun en iyi seçeneğiniz olduğunu düşünüyorum: 'ggplot (short.m, aes (x = değişken, y = değer/100, dolgu = Karmaşıklık)) + facet_wrap (~ Yöntem) + geom_bar (position =" dodge ", color =" siyah ") + coord_flip()' veya belki 'ggplot (short.m, aes (x = Yöntem: değişken, y = değer/100, dolgu = Karmaşıklık)) + geom_bar (position =" dodge ", color =" black ") + coord_flip() ' –