在R中标记对数刻度显示

时间:2011-08-01 10:38:48

标签: r label plot logarithm axes

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

3 个答案:

答案 0 :(得分:17)

除了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()将表达式转换为语言,但可以用其值替换变量。问题Latex and variables in plot label in R?中的bquote()的更多信息。
  • 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)

哪个给出了

enter image description here

答案 1 :(得分:11)

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

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)

enter image description here

编辑:latticeExtra scale.components

也解决了这个问题

答案 2 :(得分:1)

在ggplot2中你可以添加一个

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

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