在R中标记对数刻度显示

use*_*121 14 plot label logarithm r axes

在绘制histogarm,散点图和其他图表时,如果轴在R中按比例缩放到对数刻度,如何使用10 ^ -1 10 ^ 0 10 ^ 1 10 ^ 2 10 ^ 3等标签代替显示的轴只有-1,0,1,2,3等什么参数应该添加到命令,如hist(),plot()等?

Jor*_*eys 18

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

x <- 1:10
y <- exp(1:10)
plot(x,y,log="y")
Run Code Online (Sandbox Code Playgroud)

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

如果要格式化数字,或者您具有日志格式的数据,可以使用axis()进行解决方法.一些有趣的功能:

  • axTicks(x) 为您提供X轴(x = 1)或Y轴(x = 2)上的刻度线的位置
  • bquote()将表达式转换为语言,但可以用其值替换变量.有关Latexbquote()中的更多信息以及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)
Run Code Online (Sandbox Code Playgroud)

这使

在此输入图像描述


mrb*_*ich 12

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

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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

编辑:这也解决latticeExtrascale.components