是否有一个选项可以将“,”设置为 ggplot 中轴标签的默认小数点?

Mar*_*nMM 6 formatting r ggplot2 axis-labels

制作图表时,ggplot2有很多合理的比例默认值,在尝试使用 来实现相同结果时需要额外的工作scales

一个例子:

library("ggplot2")
ggplot(mtcars, aes(drat, mpg)) + geom_point()
Run Code Online (Sandbox Code Playgroud)

请注意,该图的小数点后面有一位数字。

但是,我住在荷兰,我们习惯使用逗号作为小数点。这很容易在以下时间内完成scale_x_continuous

ggplot(mtcars, aes(drat, mpg)) + 
  geom_point() + 
  scale_x_continuous(labels = scales::label_number(big.mark = ".", decimal.mark = ","))
Run Code Online (Sandbox Code Playgroud)

这个解决方案让我烦恼的是,这也增加了位数:每个标签末尾有一个额外的、相当不必要的 0。当然,这也可以在scales::label_number(), 通过设置来解决,accuracy = 0.1但这需要迭代(绘图和重新绘图以设置更合理的位数)。

是否有一个选项可以修复 ggplot 使用的默认小数点?我正在寻找一个解决方案

ggplot(mtcars, aes(drat, mpg)) + 
  geom_point()
Run Code Online (Sandbox Code Playgroud)

返回相同的图

ggplot(mtcars, aes(drat, mpg)) + 
  geom_point() + 
  scale_x_continuous(labels = scales::label_number(
    big.mark = ".", 
    decimal.mark = ",",
    accuracy = 0.1
  ))
Run Code Online (Sandbox Code Playgroud)

Ben*_*ker 3

关键似乎是format(从基础 R 开始)并scales::number使用不同的规则。我们可以恢复使用format...

myf <- function(x, ...) format(x, big.mark = ".", decimal.mark = ",", ...)
ggplot(mtcars, aes(drat, mpg)) +
  geom_point() +
  scale_x_continuous(labels = myf)
Run Code Online (Sandbox Code Playgroud)

如果你想让这些标签成为全局默认标签,我认为你可以这样做:

scale_x_continuous <- function(..., labels = myf) {
  do.call(ggplot2::scale_x_continuous, c(list(...), labels = labels))
}
Run Code Online (Sandbox Code Playgroud)