如何在ggplot2中将百分比四舍五入到小数点后两位

Mus*_*Guy 8 r rounding ggplot2

我的代码生成此图:

在此处输入图片说明

代码:

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()
Run Code Online (Sandbox Code Playgroud)

我找到了允许将数据标签正确定位在每个条形上方或下方的代码,但我似乎无法将值四舍五入到小数点后两位。

我已经尝试过round(areas, 2)以及sprintf("%0.2f")其他事情,但我尝试的任何东西似乎都不起作用,而且我确信我错过了一些简单的东西。

我哪里错了?

更新:

在罗兰的“鼓励”下,我现在几乎解决了这个问题;现在的问题是我现在丢失了百分比符号:

在此处输入图片说明

我如何让他们回来?

更新代码:

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()
Run Code Online (Sandbox Code Playgroud)

Pat*_*ckT 7

最近版本的ggplot2/scales包为scales::percent函数提供了参数,例如将百分比四舍五入为整数:

scale_y_continuous(labels = scales::percent_format(accuracy = 1L))
Run Code Online (Sandbox Code Playgroud)

这大致相当于round(x, 0L): 注意1代替0

或两位数:

scale_y_continuous(labels = scales::percent_format(accuracy = 3L))
Run Code Online (Sandbox Code Playgroud)

有一个几乎重复的问题。在此处检查 Henrik 的答案:如何防止 scales::percent 增加小数


小智 5

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


Jit*_*rni 2

aes(label=paste(round(Difference*100,digits= 2),"%",sep=""))
Run Code Online (Sandbox Code Playgroud)