ChatGPT解决这个技术问题 Extra ChatGPT

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

https://i.stack.imgur.com/wuK3a.jpg


m
mkirzon

利用:

+ scale_y_continuous(labels = scales::percent)

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

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

(命令 labels = percent 自 ggplot2 版本 2.2.1 起已过时)


我喜欢您不必为此输入 library(scales)
scales::percent(accuracy = 1) 不起作用的原因是因为 *_format() 版本创建了一个函数,而不是......无论 percent() 单独创建什么,对吗?
D
Deena

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

+1 表示没有外部依赖。我知道,由于 Hadley 是 ggplot2 和 scales 的作者,所以这并不重要——但这个解决方案仍然值得赞赏。
M
Michael Ohlrogge

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

D
DanM

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