【问题标题】:Force R to stop plotting abbreviated axis labels (scientific notation) - e.g. 1e+00强制 R 停止绘制缩写轴标签(科学记数法)——例如1e+00
【发布时间】:2022-11-17 22:45:40
【问题描述】:

在 ggplot2 中,我怎样才能停止缩写轴标签 - 例如1e+00, 1e+01 沿 x 轴绘制后?理想情况下,我想强制 R 显示实际值,在本例中为 1,10

非常感谢任何帮助。

【问题讨论】:

    标签: r graph ggplot2 axes


    【解决方案1】:

    我想你正在寻找这个:

    require(ggplot2)
    df <- data.frame(x=seq(1, 1e9, length.out=100), y=sample(100))
    # displays x-axis in scientific notation
    p  <- ggplot(data = df, aes(x=x, y=y)) + geom_line() + geom_point()
    p
    
    # displays as you require
    library(scales)
    p + scale_x_continuous(labels = label_comma())
    

    【讨论】:

    • 这奏效了。谢谢你。出于兴趣,ggplot2 中带有 scales 包的轴还有哪些其他“标签”选项?
    • 也请访问this ggplot2.org page,这对我遇到类似问题非常有帮助。
    • 该链接已过时。现在你想看看ggplot2-book.org/scale-position.html#label-functions - scales::commascales::label_comma 等的简写。
    • 唔;只是尝试这个,我收到一个新错误:Error: Breaks and labels are different lengths
    • 在我看到 this comment 之前,这对我不起作用......基本上说你需要先运行 library(scales)
    【解决方案2】:

    你有没有尝试过类似的东西:

    options(scipen=10000)
    

    在密谋之前?

    【讨论】:

    【解决方案3】:

    只是对@Arun 所做的更新,因为我今天尝试了它但它没有用,因为它被实现为

    + scale_x_continuous(labels = scales::comma)
    

    【讨论】:

    • @Arun 的回答应该可以正常工作,也许您忽略了包含 require(scales)?这将导入包含 comma 秤的包。正如您所发现的,您还可以在引用包时指定它,而不是事先要求它。
    【解决方案4】:

    作为更通用的解决方案,您可以使用 scales::format_format 删除科学记数法。这也让您可以控制标签的显示方式,而不是 scales::comma ,它只进行数量级的逗号分隔。

    例如:

    require(ggplot2)
    require(scales)
    df <- data.frame(x=seq(1, 1e9, length.out=100), y=sample(100))
    
    # Here we define spaces as the big separator
    point <- format_format(big.mark = " ", decimal.mark = ",", scientific = FALSE)
    
    # Plot it
    p  <- ggplot(data = df, aes(x=x, y=y)) + geom_line() + geom_point()
    p + scale_x_continuous(labels = point)
    

    【讨论】:

    • format_format 目前正在从 package scales 重试。您应该改用 label_number() 或 label_date() 。
    【解决方案5】:

    有一个不需要天平库的解决方案。

    你可以试试:

    # To deactivate scientific notation on y-axis:
    
        p + scale_y_continuous(labels = function(x) format(x, scientific = FALSE))
    
    # To activate scientific notation on y-axis:
    
        p + scale_y_continuous(labels = function(x) format(x, scientific = TRUE))
    
    # To deactivate scientific notation on x-axis:
    
        p + scale_x_continuous(labels = function(x) format(x, scientific = FALSE))
    
    # To activate scientific notation on x-axis:
    
        p + scale_x_continuous(labels = function(x) format(x, scientific = TRUE))
    

    【讨论】:

      【解决方案6】:

      将原始问题扩展为也包含分数,即 1、0.1、0.01、0.001 等,并避免尾随零

      p + scale_x_continuous(labels = function(x) sprintf("%g", x))
      

      【讨论】:

      • 从美学的角度来看,这要好得多!
      【解决方案7】:

      将 R 用于科学记数法的惩罚设置得更高不是最简单的通用解决方案吗?

      即,将scipen() 设置为您认为合适的数字。

      例如如果图表上的轴最大值可能是 100 000,设置 scipen(200000) 将确保 R(和 ggplot)将对 200000 以下的所有数字使用标准符号,并且不需要向 ggplot 函数添加任何行。

      【讨论】:

      【解决方案8】:
      p + scale_x_continuous(labels = scales::number_format(accuracy = 1))
      

      accuracy = 1 用于整数,如果你想要一位小数,你也可以使用accuracy = 0.1accuracy = 0.01 用于两位小数,等等。

      similar to this answer

      【讨论】:

        【解决方案9】:

        如果您还想将逗号用作千位分隔符,则可以使用以下内容:

        p + scale_x_continuous(labels=function(x) format(x, big.mark = ",", scientific = FALSE))
        

        【讨论】:

          猜你喜欢
          • 2013-01-11
          • 1970-01-01
          • 1970-01-01
          • 2017-10-02
          • 1970-01-01
          • 1970-01-01
          • 2021-06-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多