Mar*_*tin 4 r facet percentage ggplot2
我想用facet_wrap绘制一个ggplot,它不会显示实际的表百分比,而是显示每组中给定答案的百分比.我必须这样做,因为我想表明,哪个答案选择最多,每个组最重要.这些组的大小不同.
示例数据:
group <- c(rep(c("Group1"), times = 10),rep(c("Group2"), times = 6),rep(c("Group3"), times = 4))
choice <- c(rep(c("a","b","c"),length.out = 10), "a","a","a","a","b","c","b","b","b","c")
df <- data.frame(cbind(group,choice))
Run Code Online (Sandbox Code Playgroud)
如果我不能使用整体prop.t,那将是很好的,但prop.c要在我的情节中显示,因为显示重要,例如,第2组的66.67%更喜欢选择a.
library(gmodels)
CrossTable(choice, group, prop.chisq=FALSE, prop.t = TRUE, prop.c = TRUE, prop.r = FALSE, format = "SPSS")
Run Code Online (Sandbox Code Playgroud)
这是为了情节:
library(ggplot2)
g <- ggplot(df, aes_string(x="group", fill="group")) +
geom_bar(aes(y = (..count..)/sum(..count..)))+
ylab("percent")
g + facet_wrap(~ choice)
Run Code Online (Sandbox Code Playgroud)

现在第一个酒吧节目:20%,20%,0%,但应该显示40%,66.67%和0%(组中每个人的百分比,谁给出了这个答案).
对于第二个栏应显示:30%,16.667%和75%.
第三栏:30%,16.667%和25%
谢谢您的帮助.
Jaa*_*aap 10
事先计算百分比可能更好:
library(dplyr)
dfl <- df %>%
group_by(group,choice) %>%
summarise(n=n()) %>%
group_by(group) %>%
mutate(perc=100*n/sum(n))
ggplot(dfl, aes(x=group, y=perc, fill=group)) +
geom_bar(stat="identity") +
ylab("percent") +
facet_wrap(~ choice)
Run Code Online (Sandbox Code Playgroud)
这给了:

另一种(可能更好)呈现数据的方式是按组使用构面:
ggplot(dfl, aes(x=choice, y=perc, fill=choice)) +
geom_bar(stat="identity") +
ylab("percent") +
facet_wrap(~ group)
Run Code Online (Sandbox Code Playgroud)
这给了:
