My code produces this graph:
Code:
ggplot(areas, aes(x = RETAILER, y = Difference), label=sprintf(\"%0.2f\", round(areas$Difference, digits
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
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.
aes(label=paste(round(Difference*100,digits= 2),"%",sep=""))
geom_text(label=percent(Difference,.11))