ggplot2:显示每组堆叠条形图中的相对百分比

Fle*_*lec -1 stack r ggplot2 geom-text

我正在尝试为每组绘制一个基本的条形图。

由于值非常大,我想显示每个条形(即组)的条形内每个组的百分比
我设法显示了总数的百分比,但这不是我所期望的:在每个条形中,我希望 % 的总和等于 100%。

有没有一种简单的方法可以在不更改数据框的情况下做到这一点?

(DF <- data.frame( year = rep(2015:2017, each = 4), 
                   Grp = c("Grp1", "Grp2", "Grp3", "Grp4"),
                   Value = trunc(rnorm(12, 2000000, 100000))) )


ggplot(DF) +
  geom_bar(aes(x = year, y = Value, fill = Grp), 
               stat = "identity", 
               position = position_stack()) +
  geom_text(aes(x = year, y = Value, group = Grp, 
                label = percent(Value/sum(Value))) ,
                position = position_stack(vjust = .5))
Run Code Online (Sandbox Code Playgroud)

小智 5

您可以为年份的百分位创建一个新变量:

library(dplyr)
library(ggplot2)
library(scales)

DF <- DF %>% group_by(year) %>% mutate(ValuePer=(Value/sum(Value))) %>% ungroup()

ggplot(DF, aes(year, ValuePer, fill = Grp)) +
  geom_bar(stat = "identity", position = "fill") +
  geom_text(aes(label = percent(ValuePer)),
        position = position_fill())+
  scale_y_continuous(labels = percent_format())
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述