我有一个二进制变量的数据集,如下所示。
M4 = matrix(sample(1:2,20*5, replace=TRUE),20,5)
M4 <- as.data.frame(M4)
M4$id <- 1:20
我使用下面的代码生成了堆积条形图
library(reshape)
library(ggplot2)
library(scales)
M5 <- melt(M4, id="id")
M5$value <- as.factor(M5$value)
ggplot(M5, aes(x = variable)) + geom_bar(aes(fill = value), position = 'fill') +
scale_y_continuous(labels = percent_format())
现在我希望每个条形图中每个字段的百分比显示在图表中,以便每个条形图达到100%。我尝试了1,2,3以及几个类似的问题,但我无法找到适合我情况的任何示例。我该如何管理这项任务?
答案 0 :(得分:2)
试试这个方法:
test <- ggplot(M5, aes(x = variable, fill = value, position = 'fill')) +
geom_bar() +
scale_y_continuous(labels = percent_format()) +
stat_bin(aes(label=paste("n = ",..count..)), vjust=1, geom="text")
test
编辑:给出百分比并使用scale
s包:
require(scales)
test <- ggplot(M5, aes(x = variable, fill = value, position = 'fill')) +
geom_bar() +
scale_y_continuous(labels = percent_format()) +
stat_bin(aes(label = paste("n = ", scales::percent((..count..)/sum(..count..)))), vjust=1, geom="text")
test
答案 1 :(得分:1)
您可以使用sjPlot-package中的sjp.stackfrq
功能(请参阅examples here)。
M4 = matrix(sample(1:2,20*5, replace=TRUE),20,5)
M4 <- as.data.frame(M4)
sjp.stackfrq(M4)
# alternative colors: sjp.stackfrq(M4, barColor = c("aquamarine4", "brown3"))
可以使用各种参数来确定绘图外观......
答案 2 :(得分:0)
我非常喜欢使用ggplot本身创建的隐式信息,如本文所述:
using the ggplot_build() function
从我的观点来看,这为最终控制ggplot图表的外观提供了很多机会。
希望这会有所帮助
汤姆