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


107

如何将y轴更改为如图所示的百分比?我可以更改y轴范围,但不能达到百分比。 在此处输入图片说明

Answers:


236

用:

+ scale_y_continuous(labels = scales::percent)

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

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

labels = percent从ggplot2的2.2.1版本开始,该命令已过时)


3
我喜欢您不必library(scales)为此输入。
Akshay Gaur

原因scales::percent(accuracy = 1)不起作用是因为*_format()版本创建函数而不是... percent()单独创建的函数,对吗?
MokeEire

62

原则上,您可以将任何重新格式化功能传递给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, "%"))

8
+1表示没有外部依赖性。我知道,由于Hadley是ggplot2和scales的作者,所以这并不重要,但是这种解决方案仍然值得赞赏。
马克·怀特

44

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

2

从上面的@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)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.