Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding percentage labels to ggplot when using stat_count

Tags:

r

ggplot2

For some reason, I can't seem to be able to add correct proportion labels to a ggplot by using stat_count. The code below returns labels that display 100% for all categories, even though I'm using ..prop... Should I use something else instead of stat_count?

library(tidyverse)
diamonds %>% 
  ggplot(aes(color, fill=cut)) +
  geom_bar(position = 'fill') +
  stat_count(aes(label= scales::percent(..prop..)), 
             geom = 'text', position = position_fill(vjust = 0.5))

I know this can also be accomplished by calculating the percentage before feeding the data to ggplot (like below) but I have quite a bit of code which is using geom_bar and I would need to change all of it if I were to do it this way.

diamonds %>% 
  count(color, cut) %>% 
  group_by(color) %>% 
  mutate(pct=n/sum(n)) %>% 
  ggplot(aes(color, pct, fill=cut)) +
  geom_col(position = 'fill') +
  geom_text(aes(label=scales::percent(pct)), position = position_fill(vjust=0.5))
like image 826
Vlad C. Avatar asked Mar 02 '26 02:03

Vlad C.


1 Answers

You can do the calculations within geom_label(), if you don't want to change the geom_bar part:

diamonds %>% 
  ggplot(aes(color, fill=cut)) +
  geom_bar(position = 'fill') +
  geom_text(data = . %>% 
              group_by(color, cut) %>%
              tally() %>%
              mutate(p = n / sum(n)) %>%
              ungroup(),
            aes(y = p, label = scales::percent(p)),
            position = position_stack(vjust = 0.5),
            show.legend = FALSE)

plot

like image 167
Z.Lin Avatar answered Mar 04 '26 17:03

Z.Lin



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!