sunshinegirl
sunshinegirl

Reputation: 81

Adding a centred overlaid title to a ggplot2 doughnut graph

I'm hoping to create a ggplot2 title overlaying a doughnut graph, with my reprex adapted this example from https://www.r-graph-gallery.com/128-ring-or-donut-plot.html.

# load library
library(ggplot2)

# Create test data.
data <- data.frame(
  category=c("A", "B", "C"),
  count=c(10, 60, 30)
)

# Compute percentages
data$fraction <- data$count / sum(data$count)

# Compute the cumulative percentages (top of each rectangle)
data$ymax <- cumsum(data$fraction)

# Compute the bottom of each rectangle
data$ymin <- c(0, head(data$ymax, n=-1))

# Compute label position
data$labelPosition <- (data$ymax + data$ymin) / 2

# Compute a good label
data$label <- paste0(data$count)

# Make the plot
ggplot(data, aes(ymax=ymax, ymin=ymin, xmax=4, xmin=3, fill=category)) +
  geom_rect() +
  coord_polar(theta="y") + # Try to remove that to understand how the chart is built initially
  xlim(c(2, 4))+ # Try to remove that to see how to make a pie chart
  theme_void()+
  scale_fill_brewer(palette = 1)+
  geom_label( x=3.5, aes(y=labelPosition, label=label), size=6)+
  theme(legend.position = "top",
        plot.title = element_text(hjust=0.5))+
  ggtitle("My title")

This is what I have currently:

enter image description here

And this is what I want:

enter image description here

I haven't been able to find any documentation demonstrating how to do this in ggplot2. Any suggestions are appreciated.

Upvotes: 1

Views: 376

Answers (1)

Ronak Shah
Ronak Shah

Reputation: 389175

You can add an annotation layer :

library(ggplot2)

ggplot(data, aes(ymax=ymax, ymin=ymin, xmax=4, xmin=3, fill=category)) +
  geom_rect() +
  coord_polar(theta="y") + 
  xlim(c(2, 4))+ 
  theme_void()+
  scale_fill_brewer(palette = 1)+
  geom_label( x=3.5, aes(y=labelPosition, label=label), size=6)+
  theme(legend.position = "top") + 
  annotate('text', x = 2, y = 0.5, label = 'My title', color = 'blue', size = 5)

enter image description here

Upvotes: 2

Related Questions