如何使用ggplot geom_bar在堆积列中显示百分比?

时间:2019-11-07 08:17:44

标签: r ggplot2 geom-bar

我正在尝试在堆积的条形图中添加百分比标签。我可以添加什么到geom_bar中以显示堆积条形图中的百分比标签?

这是我的数据

myresults=data.frame(
    manipulation=rep(c(-20,-10,0,10,20,-20,-10,0,10,20,-20,-10,0,10,20)),
    variable=rep(c("a","a","a","a","a","f","f","f","f","f","l","l","l","l","l")),
    value=c(73,83,76,75,78,261,301,344,451,599,866,816,780,674,523))

This is my bar chart, without percentage labels.

我对此一无所知。我在“ gglot堆积条形百分比标签”上进行了搜索,发现可以使用“ + geom_text(stat =“ count”)“来添加百分比标签。

但是,当我在ggplot geom_bar中添加+ geom_text(stat =“ count”)时,R表示“错误:不得将stat_count()用于美观。”我试图弄清楚什么是y美学,但是还不是很成功。

这就是我所做的:

mydata <- ggplot(myresults, aes(x=manipulation, y=value, fill=variable))

mydata + geom_bar(stat="identity", position="fill", colour="black") + scale_fill_grey() + scale_y_continuous(labels=scales::percent) + theme_bw(base_family="Cambria") + labs(x="Manipulation", y=NULL, fill="Result") + theme(legend.direction="vertical", legend.position="right")

2 个答案:

答案 0 :(得分:1)

您可以在Adding percentage labels to a bar chart in ggplot2中执行与接受的答案类似的操作。主要区别在于您的值是堆积的(“ stacked”),而在该示例中,它们是并排的(“ dodged”)

输入百分比列:

margin-bottom

现在我们将其绘制:

myresults_pct <- myresults %>% 
group_by(manipulation) %>% 
mutate(pct=prop.table(value))

geom_text中的重要参数是position =“ stacked”,并随心所欲地上下移动标签。 (我为糟糕的文字颜色提前表示歉意。)。

enter image description here

答案 1 :(得分:0)

您可以尝试创建geom文本的位置并将其放在栏上:

mydata[, label_ypos := cumsum(value), by = manipulation]

ggplot(myresults, aes(x=manipulation, y=value, fill=variable)) + 
geom_bar(stat="identity", position="fill", colour="black") +
geom_text(aes(y=label_ypos, label= paste(round(rent, 2), '%')), vjust=2, 
        color="white", size=3.5) +
scale_y_continuous(labels = scales::percent) +
labs(x = "Manipulation", y=NULL, fill="Result") +
theme_bw(base_family = "Cambria") +
theme(legend.direction = "vertical", legend.position = "right") +
scale_fill_grey()