How to round percentage to 2 decimal places in ggplot2

前端 未结 4 1226
庸人自扰
庸人自扰 2020-12-20 17:30

My code produces this graph:

Code:

ggplot(areas, aes(x = RETAILER, y = Difference), label=sprintf(\"%0.2f\", round(areas$Difference, digits          


        
相关标签:
4条回答
  • 2020-12-20 17:58

    Recent versions of ggplot2/scales packages offer arguments to the scales::percent function, for instance to round percentages to integers:

    scale_y_continuous(labels = scales::percent_format(accuracy = 1L))
    

    This is roughly equivalent to round(x, 0L): Note the 1 instead of 0.

    Or for two digits:

    scale_y_continuous(labels = scales::percent_format(accuracy = 3L))
    

    There is a near-duplicate question. Check Henrik's answer here: How to prevent scales::percent from adding decimal

    0 讨论(0)
  • 2020-12-20 18:03

    I use the percentfunction from formattable within geom_text. So in your case I would do like so:

    geom_text(aes(label = formattable::percent(Difference)),
              vjust = ifelse(Difference >= 0, -1.5, 1.5))
    

    you can define digits within percent, but the default is 2, which is what you're looking for. The % symbols remains, like you desire. Plus, you can do stuff with it as it is still numeric underneath and not character like other solutions out there.

    0 讨论(0)
  • 2020-12-20 18:04
    aes(label=paste(round(Difference*100,digits= 2),"%",sep=""))
    
    0 讨论(0)
  • 2020-12-20 18:06

    geom_text(label=percent(Difference,.11))

    0 讨论(0)
提交回复
热议问题