使用 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_by
将 DisRN
转换为 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)
.
来省略一些中断
请注意:这不是 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_by
将 DisRN
转换为 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)
.