Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.3k views
in Technique[技术] by (71.8m points)

r - How to round percentage to 2 decimal places in ggplot2

My code produces this graph:

enter image description here

Code:

ggplot(areas, aes(x = RETAILER, y = Difference), label=sprintf("%0.2f", round(areas$Difference, digits = 2))) +
geom_bar(stat = "identity", aes(fill = RETAILER), colour = "black") +
scale_y_continuous("Percentage", labels = percent_format()) +
geom_text(aes(label = paste(Difference * 100, "%"),
              vjust = ifelse(Difference >= 0, -1.5, 1.5))) +
theme_classic()

I have found code to allow the data labels to be positioned correctly above or below each bar, but I cannot seem to get the values to round to 2 decimal places.

I have tried round(areas, 2) and sprintf("%0.2f") among other things, but nothing I try seems to work and I'm sure that I'm missing something simple.

Where am I going wrong?

UPDATE:

With Roland's "encouragement", I have now managed to almost resolve this; the problem now is that I have now lost the percentage signs:

enter image description here

How do I get them back?

Updated code:

ggplot(areas, aes(x = RETAILER, y = Difference)) +
  geom_bar(stat = "identity", aes(fill = RETAILER), colour = "black") +
  scale_y_continuous("Percentage", labels = percent_format()) +
  geom_text(aes(label = sprintf("%0.2f", areas$Difference * 100, "%"),
                vjust = ifelse(Difference >= 0, -1.5, 1.5))) +
  theme_classic()
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...