记录ggplot2中的轴标签:仅显示必要的数字?

时间:2018-05-18 14:40:57

标签: r plot ggplot2

我想在ggplot2中制作一个图表,其中x轴为log10刻度,标签为常规而非科学记数法,最小小数位数。这意味着我想将0.1显示为0.1而不是0.10和100显示为100而不是100.00。

我试过

df = data.frame(x =  c(1:10 %o% 10^(-3:2)), y = rnorm(60))

ggplot(df, aes(x=x, y=y))+
      geom_point()+scale_x_log10(labels=comma)

不幸的是,这显示了许多小数。

@BenBolker之前回答了类似的question,他的代码适用于没有小数的数字,但如果有小于1的数字,它似乎给出与labels =逗号相同的结果。

plain <- function(x,...) {
  format(x, ..., scientific = FALSE, trim = TRUE)
}

ggplot(df, aes(x=x, y=y))+
  geom_point()+scale_x_log10(labels=plain)

2 个答案:

答案 0 :(得分:4)

drop0trailing = TRUE中添加plain

plain <- function(x,...) {
  format(x, ..., scientific = FALSE, drop0trailing = TRUE)
}

要查看漂亮打印的其他选项,请参阅?format

enter image description here

答案 1 :(得分:1)

只是想补充一点,而不是创建单独的 plain 函数,我们还可以使用 scales 包,该包为 ggplot2 标度提供了一套很好的工具,并使对数轴标签格式化一阵微风。这是演示对数轴标签的一些格式选项的可重现代码:

library(ggplot2)
library(scales)
library(patchwork)

df <- data.frame(x =  c(1:10 %o% 10^(-3:3)), y = rnorm(70))

base <- ggplot(df, aes(x, y)) + 
  geom_point()

p1 <- base + scale_x_log10(labels = label_number(drop0trailing = TRUE))
p2 <- base + scale_x_log10(labels = label_comma(drop0trailing = TRUE)) 
p3 <- base + 
  scale_x_log10(
    labels = label_dollar(drop0trailing = TRUE),
    # prevents axis label from going off the chart
    expand = expansion(mult = c(0.05, .06)) 
  )
p4 <- base + scale_x_log10(labels = trans_format("log10", label_math()))

(p1 + p2 + p3 + p4) + plot_annotation(tag_levels = "1", tag_prefix = "p")

reprex package (v2.0.0) 于 2021 年 5 月 16 日创建