ggplot2: How to add percentage labels to a donut chart
Asked Answered
S

1

7

I am pretty new to R... so forgive me. I'm trying to make donut plots using ggplot2. I have modified the code of the post ggplot Donut chart but now I'm not able to add the percentage on the chart. This is my attempt:

library(ggplot2)

blank_theme <- theme_minimal()+
  theme(
    axis.title.x = element_blank(),
    axis.title.y = element_blank(),
    panel.border = element_blank(),
    panel.grid=element_blank(),
    axis.ticks = element_blank(),
    plot.title=element_text(size=14, face="bold")
  )



dat = data.frame(count=c(319, 442, 239), category=c("University", "High Scool", "Lower"))


dat$fraction = dat$count / sum(dat$count)

dat$ymax = cumsum(dat$fraction)
dat$ymin = c(0, head(dat$ymax, n=-1))

dat$category <- factor(dat$category, levels = c("University", "High Scool", "Lower"))


p1 = ggplot(dat, aes(fill=category, ymax=ymax, ymin=ymin, xmax=4, xmin=3)) +
  geom_rect(color='blue') +
  coord_polar(theta="y") +
  xlim(c(1, 4)) 



edu<-p1 + scale_fill_brewer("Education") + blank_theme +
  theme(axis.text.x=element_blank()) + theme(legend.position=c(.5, .5)) + ggtitle("") +
  theme(panel.grid=element_blank()) +
  theme(axis.text=element_blank()) +
  theme(axis.ticks=element_blank()) +
  theme(legend.title = element_text(size=16, face="bold")) +
  theme(legend.text = element_text(size = 14, face = "bold")) 

edu

I've tried many geom_text and scale_y_continuous code but... nothing. May someone help me? Thanks

Seigel answered 8/2, 2016 at 10:15 Comment(0)
B
12

You could use geom_label:

edu +
  geom_label(
    aes(label = paste(fraction * 100, "%"),
    x = 3.5,
    y = (ymin + ymax) / 2),
    inherit.aes = TRUE,
    show.legend = FALSE
  )

enter image description here

Beowulf answered 8/2, 2016 at 10:25 Comment(4)
... and to make the labels bigger... I tried ", label.size" but it doesn't work...Seigel
add size=8 or more in the geom_label (but not inside aes)Beowulf
I like this chart. Does someone know how I could choose my own colors instead of the shades of blue?Holy
@user3281413 add + scale_fill_discrete() and see its help about picking colorsBeowulf

© 2022 - 2024 — McMap. All rights reserved.