Przeglądałem przykłady podane na tej stronie, ale z jakiegoś powodu nie mogłem znaleźć właściwy sposób na zrobienie tego.

Mam takie dane:

      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 można je utworzyć 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ącą fabułę:

enter image description here

To, czego naprawdę szukam, to połączyć każdy słupek w jednej grupie z jednym słupkiem i przedstawić wartości procentowe jako ułamek tego samego słupka (gdzie każdy członek z każdej grupy jest wykreślany za pomocą jednego słupka, przy czym każdy słupek ma wartości procentowe jako ich zabarwienie). Więc użyłem następujących:

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

I uzyskałem to:

enter image description here

Ale teraz nie mogę poprawnie uzyskać kolorów. Chcę czegoś dokładnie takiego jak podane poniżej, ale nie jestem w stanie zrozumieć, jak to zrobić. Jakieś sugestie, jak to zrobić?

enter image description here

10
Legend 28 lipiec 2011, 01:34
1
 – 
Ari B. Friedman
28 lipiec 2011, 01:41
@gsk3: Po kilku eksperymentach udało mi się to zrobić, chociaż nie używałem position="stack". Zastanawiam się, jaka jest różnica. Byłoby dobrze, gdyby ggplot nie używał ograniczonych kolorów, zamiast używać jednego dla każdego nowego znalezionego procentu.
 – 
Legend
28 lipiec 2011, 01:44

2 odpowiedzi

Najlepsza odpowiedź

Ok w końcu to dostałem! Hurra! Oto pełny kod, jeśli ktoś inny jest zainteresowany:

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

I z tym, co zasugerował @joran (bardzo dziękuję!) w komentarzach:

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

enter image description here

11
Legend 28 lipiec 2011, 01:42
2
Bardzo dobrze! Właśnie miałem to opublikować ... zauważ, że jeśli chcesz dyskretną skalę kolorów w procentach, a nie ciągłą, po prostu użyj fill = factor(Percentage).
 – 
joran
28 lipiec 2011, 01:44
+1 Och cudownie! Szukałem tej wersji! Mógłbym jednak zrezygnować z lepszego schematu kolorów. Musisz dowiedzieć się więcej na ten temat.
 – 
Legend
28 lipiec 2011, 01:46
Jako nieco niezwiązane pytanie, czy wiesz, jak przez przypadek zmienić ten factor(Percentage) tekst w legendzie na prawo na coś innego?
 – 
Legend
28 lipiec 2011, 01:47
2
Jasne, + labs(fill = "Fill label")
 – 
joran
28 lipiec 2011, 01:48

Jesteś blisko. Próbować

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

Który produkuje

enter image description here

5
Roman Luštrik 28 lipiec 2011, 01:46
+1 Dziękuję za to! Właśnie zaktualizowałem moją odpowiedź komentarzami @joran. Myślę, że trochę więcej poprawek, a te wykresy będą wyglądać niesamowicie.
 – 
Legend
28 lipiec 2011, 01:48