2011-07-27 11 views
8

Przechodzę przez przykłady podane na stronie this, ale z jakiegoś powodu nie można znaleźć odpowiedniego sposobu na to.Jak wykreślić stos słupkowy z ggplot?

mam pewne dane tak:

 Group Member Percentage 
[1,] "1" "A" "60"  
[2,] "1" "A" "20"  
[3,] "1" "A" "20"  
[4,] "1" "B" "80"  
[5,] "1" "B" "5"  
[6,] "1" "B" "5"  
[7,] "1" "B" "5"  
[8,] "2" "C" "50"  
[9,] "2" "C" "50"  
[10,] "2" "D" "25"  
[11,] "2" "D" "25"  
[12,] "2" "D" "25"  
[13,] "2" "D" "20"  
[14,] "2" "D" "5" 

i mogą być tworzone za pomocą następujących poleceń:

a = c(1,1,1,1,1,1,1,2,2,2,2,2,2,2) 
b = c("A","A","A","B","B","B","B","C","C","D","D","D","D","D") 
c = c(60,20,20,80,5,5,5,50,50,25,25,25,20,5) 
dat = data.frame(Group=a, Member=b, Percentage=c) 
ggplot(dat, aes(x=Member, y=Percentage)) + geom_bar(stat="identity", position="dodge", fill="white", colour="black") 

Ostatni wiersz daje mi następujące działki:

enter image description here

Tym, czego naprawdę szukam, jest połączenie każdego z pręty w jednej grupie do jednego paska i reprezentują wartości procentowe jako ułamek tego samego pręta (gdzie każdy element z każdej grupy jest wykreślany z jednym taktem, przy czym każdy słupek ma wartości procentowe jako ich kolory). Użyłem więc następujące:

ggplot(dat, aes(x=Member, y=Percentage)) + geom_bar(stat="identity", colour="white") 

i uzyskane w ten sposób:

enter image description here

Ale teraz nie mogę dostać odpowiednio kolory. Chcę czegoś dokładnie takiego, jak podano poniżej, ale nie jestem w stanie zrozumieć, jak to zrobić. Wszelkie sugestie, jak to zrobić?

enter image description here

+1

http://had.co.nz/ggplot2/position_stack.html –

+0

@ GSK3: Właśnie udało się zrobić to po pewnym eksperymenty choć nie używałem 'position =" stack "'. Zastanawiam się jaka jest różnica. To, co byłoby dobre, to ograniczyć ggplot do używania ograniczonych kolorów zamiast używać jednego dla każdego nowego znalezionego procentu. – Legend

Odpowiedz

9

Ok wreszcie to! Hurra! Oto kompletny kod, jeśli ktoś jest zainteresowany: (! Dzięki dużo)

a = c(1,1,1,1,1,1,1,2,2,2,2,2,2,2) 
b = c("A","A","A","B","B","B","B","C","C","D","D","D","D","D") 
c = c(60,20,20,80,5,5,5,50,50,25,25,25,20,5) 
dat = data.frame(Group=a, Member=b, Percentage=c) 
ggplot(dat, aes(x=Member, y=Percentage, fill=Percentage)) + geom_bar(stat="identity", colour="white") 

enter image description here

iz jakim został zaproponowany przez @joran w komentarzach:

ggplot(dat, aes(x=Member, y=Percentage, fill=Percentage)) + geom_bar(stat="identity", colour="white") 

enter image description here

+2

Dobra robota! Właśnie miałem to opublikować ... pamiętaj, że jeśli chcesz używać dyskretnej skali kolorów w Procentach, zamiast ciągłej, użyj po prostu współczynnika wypełnienia (Procent). – joran

+0

+1 Och, cudownie! Szukałem tej wersji! Mogłabym jednak pozbyć się lepszej kolorystyki. Chcesz dowiedzieć się więcej na ten temat. – Legend

+0

Jako nieco niezwiązane z tym pytaniem, czy mógłbyś wiedzieć, jak zmienić ten tekst "czynnik (procent)" na legendzie z prawej strony na coś innego przez przypadek? – Legend

4

Jesteś blisko. Spróbuj

ggplot(dat, aes(x=Member, y=Percentage, fill = factor(Percentage))) + geom_bar(stat = "identity") 

która produkuje

enter image description here

+0

+1 Dziękuję za to! Właśnie zaktualizowałem swoją odpowiedź za pomocą komentarzy @ jorana.Wydaje mi się, że trochę więcej podkręcania i te wykresy będą wyglądały świetnie. – Legend