Jak wykreślić względne proporcje dwóch grup za pomocą estetyki wypełnienia w ggplot2?Jak wykreślić względne proporcje dwóch grup za pomocą estetyki wypełnienia w ggplot2?
Zadaję to pytanie tutaj, ponieważ kilka innych odpowiedzi na ten temat wydają się błędne (ex1, ex2 i ex3), ale Krzyż Zatwierdzone wydaje się mieć konkretne pytania funkcjonalnie zakazane R (CV meta). ..density..
jest koncepcyjnie powiązany, ale różni się od proporcji (ex4 i ex5). Tak więc prawidłowa odpowiedź wydaje się nie obejmować gęstości.
przykład:
set.seed(1200)
test <- data.frame(
test1 = factor(sample(letters[1:2], 100, replace = TRUE,prob=c(.25,.75)),ordered=TRUE,levels=letters[1:2]),
test2 = factor(sample(letters[3:8], 100, replace = TRUE),ordered=TRUE,levels=letters[3:8])
)
ggplot(test, aes(test2)) + geom_bar(aes(y = ..density.., group=test1, fill=test1) ,position="dodge")
#For example, the plotted data shows level a x c as being slightly in excess of .15, but a manual calculation shows a value of .138
counts <- with(test,table(test1,test2))
counts/matrix(rowSums(counts),nrow=2,ncol=6)
odpowiedź, która wydaje się, uzyskując wyjściowy, który jest correct ucieka się rozwiązanie, które nie wykorzystuje ggplot2 (liczonej go poza ggplot2) lub wymaga, aby zespół można stosować zamiast wypełnij estetykę.
Edycja: Kopanie w stat_bin daje pewność, że funkcja ostatecznie nazywa się bin, ale bin tylko przekazuje wartości w XAES. Bez przepisywania stat_bin (lub tworzenia kolejnego stat_) hack zastosowany w powyższej odpowiedzi może zostać uogólniony do wypełnienia aes pod nieobecność grupy aes z następującym kodem dla yes: y = ..count../sapply(fill, FUN=function(x) sum(count[fill == x]))
. To po prostu zastępuje PANEL (ukrytą kolumnę, która jest obecna na końcu StatBin) wypełnieniem). Prawdopodobnie inne ukryte zmienne mogłyby uzyskać takie samo traktowanie.
Jak to uogólnić do przypadków, w których mam, powiedzmy, działka podzielona na grupy, a następnie szlifowane pod panelami? – RoyalTS
@RoyalTS: Wierzę, że ten sam problem dotyczy, ponieważ problem polega na tym, że nie ma (lub nie było co najmniej) odpowiedniej funkcji stat_ w ggplot2. Napisałem rozwiązanie robocze, które działa jako wtyczka z ggplot2 ... ale nie jestem pewien, jak solidnie jest, więc nie opublikowałem go. – russellpierce