R语言 带标签的轴=逗号,对于较大的数字不显示小数

xzlaal3s  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(295)

我有一个对数刻度的X轴,我想显示不带科学记数法的标签(* 即 * 不是1e3,而是1,000)。我一直使用label = scales::comma执行此操作,但现在我的数据集也具有非常小的值(例如,0.001)。因此,当我加上+ scale_x_log10(label = comma)时,我得到一个x轴,其中1e-3看起来像0.001(应该是这样),但是1e3看起来像1,000.000。我想去掉三个小数位,这样我就得到了1,000,而不是1,000.000。使用label = comma_format(accuracy = 1),正如所建议的,here将使0.001之类的值看起来就像0,因此它不是一个有效的选项。
有人知道吗?这里有一个可重复的问题的例子:

library(ggplot2)

X <- 10^seq(-3, 3, length.out = 50)
Y <- 100 * X/(X + 1)
Demo_data <- data.frame(X, Y)

ggplot(Demo_data, aes(x = X, y = Y)) + geom_line(size = 1.5) + 
  scale_x_log10(breaks = c(1e-3, 1e-2, 1e-1, 1, 10, 1e2, 1e3),
                label = scales::comma)

此解决方案不起作用:

ggplot(Demo_data, aes(x = X, y = Y)) + geom_line(size = 1.5) + 
      scale_x_log10(breaks = c(1e-3, 1e-2, 1e-1, 1, 10, 1e2, 1e3),
                    label = scales::comma_format(accuracy = 1))
9udxz4iz

9udxz4iz1#

一种选择是使用ifelse来有条件地将accuracy设置为值〉1和〈1:

X <- 10^seq(-3, 3, length.out = 50)
Y <- 100 * X / (X + 1)
Demo_data <- data.frame(X, Y)

library(ggplot2)
library(scales)

ggplot(Demo_data, aes(x = X, y = Y)) +
  geom_line(size = 1.5) +
  scale_x_log10(
    breaks = c(1e-3, 1e-2, 1e-1, 1, 10, 1e2, 1e3),
    label = ~ ifelse(.x < 1, scales::comma(.x), scales::comma(.x, accuracy = 1))
  )
#> Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
#> ℹ Please use `linewidth` instead.

相关问题