如何在ggplot2中使用填充美學來繪製兩組的相對比例?如何在ggplot2中使用填充美學來繪製兩組的相對比例?
我問這裏這個問題,因爲在這個題目其他幾個答案似乎不正確(ex1,ex2和ex3),但交叉驗證似乎有功能禁止[R具體問題(CV meta)。 ..density..
在概念上與相關但不同於比例(ex4和ex5)。所以正確的答案似乎不涉及密度。
實施例:
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)
,似乎產生一個輸出是correct訴諸不使用GGPLOT2(計算它GGPLOT2以外)中的溶液或要求一個面板,而不是所使用的答案填充美學。
編輯:挖掘到stat_bin會產生最終調用的函數是bin,但bin只會傳遞x aes中的值。而無需重寫stat_bin(或使得另一stat_),其在上述參考答案施加的黑客可以推廣到填充AES 在不存在該組的AES與Y AES以下代碼:y = ..count../sapply(fill, FUN=function(x) sum(count[fill == x]))
。這只是用填充替代PANEL(StatBin結尾處的隱藏列)。大概其他隱藏的變量可能會得到相同的處理。
如何這並推廣到情況下,我有,比方說,一個地塊分成組,然後刻面成面板? – RoyalTS
@Ryall:我認爲同樣的問題適用,因爲問題是ggplot2中沒有(或者至少沒有)適當的stat_函數。我寫了一個可以作爲ggplot2插件的草稿解決方案......但我不確定它有多堅實,所以我沒有發佈它。 – russellpierce