Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Adding "0" decimal in a donut chart using ggplot2 from R

I have created a donut chart in R using ggplot2 package. Now I need to add "0" decimal in the "No" slice. It is now shown in the graph as "74%" – but I want to present this as "74.0%". The followings are the codes and the graph –

df = data.frame(Dep = c("No", 
                               "Mild",
                               "Moderate",
                               "Moderately Severe",
                               "Severe"),
                Percentage = c(74.0, 12.8, 9.4, 2.3, 1.6),
                Count = c(284, 49, 36, 9, 6))


df$Dep = factor(df$Dep, levels = c("No", 
                                                 "Mild",
                                                 "Moderate",
                                                 "Moderately Severe",
                                                 "Severe"))

df = df %>%
    arrange(desc(Dep)) %>%
    mutate (Percentage) %>%
    mutate (ypos = cumsum(Percentage)-0.5*Percentage)

donut= ggplot(df, aes(x =2, y=Percentage,fill=Dep))+
    geom_bar(stat="identity")+
    coord_polar("y", start=180)+
    scale_fill_brewer(palette = "Set2")+
    theme_void()+
    geom_text(aes(y=ypos, label=paste0(round(Percentage,1),"%")),
              color = "black", size=4.5, angle = 0)+
    xlim(0.25, 2.5)+theme(legend.position=c(.5, .5))+
    theme(panel.grid=element_blank()) +
    theme(axis.text=element_blank()) +
    theme(axis.ticks=element_blank()) +
    theme(legend.title = element_text(size=18, face="bold",)) +
    theme(legend.text = element_text(size = 14, face = "bold"))

donut

I got this donut chart –
enter image description here

I am searching for this solution but cannot be able to find anything useful. Thanks in advance. Your help will be much appreciated.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

You just need to use sprintf(). Please find below a reprex.

Reprex

library(ggplot2)
library(dplyr)
#> 
#> Attachement du package : 'dplyr'
#> Les objets suivants sont masqués depuis 'package:stats':
#> 
#>     filter, lag
#> Les objets suivants sont masqués depuis 'package:base':
#> 
#>     intersect, setdiff, setequal, union

df = data.frame(Depression = c("No", 
                               "Mild",
                               "Moderate",
                               "Moderately Severe",
                               "Severe"),
                Percentage = c(74.0, 12.8, 9.4, 2.3, 1.6),
                Count = c(284, 49, 36, 9, 6))


df$Depression = factor(df$Depression, levels = c("No", 
                                                 "Mild",
                                                 "Moderate",
                                                 "Moderately Severe",
                                                 "Severe"))

df = df %>%
  arrange(desc(Depression)) %>%
  mutate (Percentage) %>%
  mutate (ypos = cumsum(Percentage)-0.5*Percentage)

donut= ggplot(df, aes(x =2, y=Percentage,fill=Depression))+
  geom_bar(stat="identity")+
  coord_polar("y", start=180)+
  scale_fill_brewer(palette = "Pastel2")+
  theme_void()+
  geom_text(aes(y=ypos, label=paste0(sprintf("%.1f",Percentage),"%")),
            color = "black", size=4.5, angle = 0)+
  xlim(0.25, 2.5)+theme(legend.position=c(.5, .5))+
  theme(panel.grid=element_blank()) +
  theme(axis.text=element_blank()) +
  theme(axis.ticks=element_blank()) +
  theme(legend.title = element_text(size=18, face="bold",)) +
  theme(legend.text = element_text(size = 14, face = "bold"))

donut

Created on 2022-03-05 by the reprex package (v2.0.1)

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading