【问题标题】:ggplot2 axis transformation by constant factorggplot2轴变换由常数因子
【发布时间】:2011-06-06 11:18:30
【问题描述】:

在 ggplot2 密度图中 (geom_density) 我有以下 y 轴标签

  • 0.000
  • 0.005
  • 0.010
  • 0.015
  • 0.020

将它们更改为类似的正确方法是什么

  • 0
  • 5
  • 10
  • 15
  • 20

可能会在标签中自动添加“10^3 x 密度”。过去我只是将数据相乘并手动更改标签,但在这种情况下,y 轴数据是由密度图为我生成的。

我知道我可以写 scale_y_continuous(trans="log10") 之类的东西,但还没有找到任何方法来做一个简单的乘法常数,或者定义一个自定义转换。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    您可以使用之前定义的以下函数添加scale_y_continuous(formatter='formatter1000')

    formatter1000 <- function(x){ 
        x*1000 
    }
    

    请注意,上述答案是在一年半前的 ggplot 版本中给出的。对于 ggplot 的最新版本(0.9),上面的示例无法正常工作,请尝试以下操作:scale_y_continuous(labels = formatter1000)

    【讨论】:

    • 太完美了。您是否遇到过任何关于格式化程序的好文档?
    • @Pengin:不幸的是我没有。 ggplot 中有一些硬编码的格式化程序,例如:逗号、科学、百分比、美元,但您可以使用上述简单函数编写任何内容。
    • 它们基本上就这些了,但在下一个版本中,它们将被拆分到自己的包中,希望有更多的文档。
    • 警告:这在ggplot 0.9 之后不起作用。有关更新版本,请参阅下面的答案。
    • scale_y_continuous(labels = formatter1000) 注释对我有用。请注意,labels' argument takes a function while the formatter` 选项显然将函数名称作为文本字符串。
    【解决方案2】:

    对于 ggplot2 版本 0.90,此答案已过时。现在,可以通过这种方式(更简洁)指定相同的格式:

    scale_y_continuous(labels=function(x)x*1000)
    

    或者如果您想多次使用相同的标签方案:

    formatter1000 <- function(){
      function(x)x*1000
    }
    
    scale_y_continuous(labels=formatter1000())
    

    请注意,如果您使用 xlimylim 函数指定轴限制,这可能不起作用。相反,请使用 scale_y_continuous(..., limits=c(0, 1)) 规范。

    scales 包中还有很多内置格式,包括逗号格式、百分比格式、美元格式和科学记数法格式。有关详细信息,请参阅其documentation

    希望能对那里的人有所帮助,因为这种变化确实让我感到困惑!

    【讨论】:

    • 谢谢。 scales 包的文档只是细节。 scales 包的作用是提供大量格式化函数,如本文中的formatter1000,要选择其中一个,你可以从函数名中猜出它的作用。
    猜你喜欢
    • 2019-06-17
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多