【问题标题】:Labelling logarithmic scale display in R在R中标记对数刻度显示
【发布时间】:2011-10-17 08:32:27
【问题描述】:

在 R 中绘制直方图、散点图和其他坐标轴缩放为对数刻度的图时,如何使用 10^-1 10^0 10^1 10^2 10^3 等标签而不是轴仅显示 -1、0、1、2、3 等。应该在 hist()、plot() 等命令中添加哪些参数?

【问题讨论】:

标签: r label plot logarithm axes


【解决方案1】:

除了 ggplot2 的解决方案(参见 gsk3 的评论),我想补充一点,当使用正确的参数时,这也会在 plot() 中自动发生,例如:

x <- 1:10
y <- exp(1:10)
plot(x,y,log="y")

您可以将参数log="x" 用于X 轴,或log="xy" 用于两者。

如果你想格式化数字,或者你有日志格式的数据,你可以使用axis()来解决。一些有趣的功能:

  • axTicks(x) 为您提供刻度在 X 轴 (x=1) 或 Y 轴 (x=2) 上的位置
  • bquote() 将表达式转换为语言,但可以将变量替换为其值。有关bquote() 的更多信息,请参见问题Latex and variables in plot label in R?
  • as.expression() 使来自 bquote() 的语言对象成为一个表达式。这允许axis() 进行格式化,如?plotmath 中所述。它不能对语言对象这样做。

良好格式的示例:

x <- y <- 1:10
plot(x,y,yaxt="n")
aty <- axTicks(2)
labels <- sapply(aty,function(i)
            as.expression(bquote(10^ .(i)))
          )
axis(2,at=aty,labels=labels)

这给了

【讨论】:

  • 谢谢,这非常有用,我认为它是一个通用的解决方案。为我工作得很好
【解决方案2】:

这是绘制此类轴的另一种方法:

plot(NA, xlim=c(0,10), ylim=c(1, 10^4), xlab="x", ylab="y", log="y", yaxt="n")
at.y <- outer(1:9, 10^(0:4))
lab.y <- ifelse(log10(at.y) %% 1 == 0, at.y, NA)
axis(2, at=at.y, labels=lab.y, las=1)

编辑:这也在latticeExtrascale.components 中得到解决

【讨论】:

    【解决方案3】:

    在ggplot2中你可以添加一个

    ... + 
    scale_x_log10() + 
    scale_y_log10(limits = c(1e-4,1), breaks=c(1e-4,1e-3,1e-2,0.1,1)) + ...
    

    要缩放您的轴,标记它们并添加自定义中断。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-20
      • 2021-10-15
      • 1970-01-01
      • 2015-09-02
      • 1970-01-01
      • 1970-01-01
      • 2021-08-01
      相关资源
      最近更新 更多