pie chart with ggplot2 with specific order and percentage annotations

You have to change levels of Make by share or volume (provided data is already sorted):

dfc$Make <- factor(dfc$Make, levels = rev(as.character(dfc$Make)))

And play with theme arguments:

ggplot(dfc[1:10, ], aes("", share, fill = Make)) +
    geom_bar(width = 1, size = 1, color = "white", stat = "identity") +
    coord_polar("y") +
    geom_text(aes(label = paste0(round(share), "%")), 
              position = position_stack(vjust = 0.5)) +
    labs(x = NULL, y = NULL, fill = NULL, 
         title = "market share") +
    guides(fill = guide_legend(reverse = TRUE)) +
    scale_fill_manual(values = c("#ffd700", "#bcbcbc", "#ffa500", "#254290")) +
    theme_classic() +
    theme(axis.line = element_blank(),
          axis.text = element_blank(),
          axis.ticks = element_blank(),
          plot.title = element_text(hjust = 0.5, color = "#666666"))

enter image description here


You can try:

df %>%
  group_by(Make) %>%
  summarise(volume = sum(Cnt)) %>%
  mutate(share=volume/sum(volume)) %>%
  ggplot(aes(x="", y= share, fill=reorder(Make, volume))) +
   geom_col() +
   geom_text(aes(label = scales::percent(round(share,3))), position = position_stack(vjust = 0.5))+
   coord_polar(theta = "y") + 
   theme_void()

enter image description here

add guides(fill = guide_legend(reverse = TRUE)) for a reversed legend

Tags:

R

Ggplot2