如何在条形图中将 Y 轴数字改为百分比?

我们怎样才能把 y 轴改成百分比呢?我可以改变 y 轴的范围,但是我不能做到百分比。 enter image description here

224089 次浏览

ggplot2scales软件包可以做到这一点:

y <- c(12, 20)/100
x <- c(1, 2)


library(ggplot2)
library(scales)
myplot <- qplot(as.factor(x), y, geom="bar")
myplot + scale_y_continuous(labels=percent)

似乎 stat()选项已被取消,导致错误消息。请尝试以下操作:

library(scales)


myplot <- ggplot(mtcars, aes(factor(cyl))) +
geom_bar(aes(y = (..count..)/sum(..count..))) +
scale_y_continuous(labels=percent)


myplot

用途:

+ scale_y_continuous(labels = scales::percent)

或者,为百分比指定格式化参数:

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

(自 ggplot2版本2.2.1以来,命令 labels = percent已过时)

原则上,您可以将任何重新格式化函数传递给 labels参数:

+ scale_y_continuous(labels = function(x) paste0(x*100, "%")) # Multiply by 100 & add %

或者

+ scale_y_continuous(labels = function(x) paste0(x, "%")) # Add percent sign

可重复的例子:

library(ggplot2)
df = data.frame(x=seq(0,1,0.1), y=seq(0,1,0.1))


ggplot(df, aes(x,y)) +
geom_point() +
scale_y_continuous(labels = function(x) paste0(x*100, "%"))

从上面的@Deena 借鉴来的,标签的功能修改比你想象的更加多样化。例如,我有一个 ggplot,其中计数变量的分母为140。我举了她的例子:

scale_y_continuous(labels = function(x) paste0(round(x/140*100,1), "%"), breaks = seq(0, 140, 35))

这使我能够得到140分母上的百分比,然后以25% 的增量打破规模,而不是它默认的奇怪数字。这里的关键是,规模分割仍然是由原始计数,而不是由您的百分比设置。因此,中断必须是从零到分母值,“中断”中的第三个参数是分母除以你想要的多少个标签中断(例如140 * 0.25 = 35)。