R 如何在ggplot2中使用填充美学绘制两组的相对比例?

R 如何在ggplot2中使用填充美学绘制两组的相对比例?,r,ggplot2,statistics,visualization,data-visualization,R,Ggplot2,Statistics,Visualization,Data Visualization,如何在ggplot2中使用填充美学绘制两组的相对比例 我在这里问这个问题是因为关于这个主题的其他几个答案似乎不正确(,和),但交叉验证似乎在功能上禁止了R特定的问题()密度..在概念上与比例相关,但与比例(和)不同。因此,正确答案似乎并不涉及密度 例如: set.seed(1200) test <- data.frame( test1 = factor(sample(letters[1:2], 100, replace = TRUE,prob=c(.25,.75)),ordered=T

如何在ggplot2中使用填充美学绘制两组的相对比例

我在这里问这个问题是因为关于这个主题的其他几个答案似乎不正确(,和),但交叉验证似乎在功能上禁止了R特定的问题()<代码>密度..在概念上与比例相关,但与比例(和)不同。因此,正确答案似乎并不涉及密度

例如:

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)
set.seed(1200)

test这是一个令人敬畏的黑客程序,但它似乎可以满足您的需要

ggplot(test, aes(test2)) + geom_bar(aes(y = ..count../rep(c(sum(..count..[1:6]), sum(..count..[7:12])), each=6), 
                                    group=test1, fill=test1) ,position="dodge") + 
                                      scale_y_continuous(name="proportion")

+1尽管这是一个令人敬畏的黑客行为。您是如何确定..count..的底层数据结构的。。为了想出这个?知道这一点是想出任何看起来像是通用解决方案的关键。这如何推广到我的情况,比如说,一个情节分成小组,然后分面成小组?@RoyalTS:我相信同样的问题也适用,因为问题是ggplot2中没有(或至少没有)合适的统计函数。我写了一个解决方案草案,作为ggplot2的一个插件。。。但我不确定它有多坚固,所以我没有贴出来。