使用 ggplot2 时在轴上格式化数字

Formatting numbers on axis when using ggplot2

请注意:这不是 this question. This question deals with a similar issue like here 的重复,遗憾的是没有回答。

这是一个 updated version of this question,在我看来,它被错误地归类为重复项。

当 x 轴是离散变量时,我想格式化 x 轴刻度上的数字。一个简单的例子:

library(scales)

RN <- sample(1:1000,1000,replace=TRUE)
RN <- RN/1000
breaks <- c(seq(from=0, to=1, by=0.05))
DF <- data.frame(RN)
DF$DisRN <- cut(DF$RN,breaks=c(breaks,Inf),labels=as.numeric(breaks))
DF_Plot <- DF %>% group_by(DisRN) %>% summarise(cnt=n())
ggplot(DF_Plot,aes(y=cnt,x=DisRN)) + geom_bar(position="dodge",stat="identity")

我得到的是这个output from plot

但是,我想要得到的是在 x 轴上将数字格式化为每个小数点后唯一的两位数(即 0.00、0.05、0.10、0.15 0.20 等)

Advice given here 不起作用,因为

ggplot(DF_Plot,aes(y=cnt,x=DisRN)) + geom_bar(position="dodge",stat="identity") +
 scale_x_continuous(labels = scales::label_number(accuracy = 0.01))

以错误消息结束:

Error: Discrete value supplied to continuous scale

scale_x_discrete() 似乎没有类似的选项。

追加问题:有没有什么办法可以省去一些酒吧的描述?

感谢您的帮助。

DF_Plot <- DF %>% group_by(DisRN) %>% summarise(cnt=n()) 中的

group_byDisRN 转换为 factor。像 as.numeric(DisRN)` 那样转换回 numeric 将解决问题:

ggplot(DF_Plot,aes(y=cnt,x=as.numeric(DisRN))) + geom_bar(position="dodge",stat="identity") +
  scale_x_continuous(labels = scales::number(as.numeric(.x), accuracy = 0.01))

利用您可以将 (lambda) 函数作为 labels 参数的事实,您可以在将字符标签传递给 scales::number.[=17= 之前将其重新转换为数字]

library(ggplot2)
library(scales)
library(dplyr)

RN <- sample(1:1000,1000,replace=TRUE)
RN <- RN/1000
breaks <- c(seq(from=0, to=1, by=0.05))
DF <- data.frame(RN)
DF$DisRN <- cut(DF$RN,breaks=c(breaks,Inf),labels=as.numeric(breaks))
DF_Plot <- DF %>% group_by(DisRN) %>% summarise(cnt=n())


ggplot(DF_Plot,aes(y=cnt,x=DisRN)) +
  geom_col(position="dodge") +
  scale_x_discrete(
    labels = ~ number(as.numeric(.x), accuracy = 0.01)
  )

reprex package (v2.0.1)

创建于 2022-01-11

您可以通过将比例的 breaks 参数设置为 breaks = seq(0, 0.9, by = 0.1).

来省略一些中断