创建跨多个数量级的日志序列

Loo*_*eft 17 r ggplot2 seq

为了在ggplot2图表中设置对数刻度的自定义中断间隔,我从多个序列创建了以下向量.

breaks <- c(seq(2000, 10000, by = 1000),
        seq(20000, 100000, by = 10000),
        seq (200000, 1000000, by = 100000),
        seq (2000000,10000000, by = 1000000),
        seq (20000000,100000000, by = 10000000))
Run Code Online (Sandbox Code Playgroud)

这是快速而又脏的,但它在日志间隔内给出了2,000到100,000,000的所需休息时间.

> breaks
 [1] 2e+03 3e+03 4e+03 5e+03 6e+03 7e+03 8e+03 9e+03 1e+04 2e+04 3e+04 4e+04
[13] 5e+04 6e+04 7e+04 8e+04 9e+04 1e+05 2e+05 3e+05 4e+05 5e+05 6e+05 7e+05
[25] 8e+05 9e+05 1e+06 2e+06 3e+06 4e+06 5e+06 6e+06 7e+06 8e+06 9e+06 1e+07
[37] 2e+07 3e+07 4e+07 5e+07 6e+07 7e+07 8e+07 9e+07 1e+08
Run Code Online (Sandbox Code Playgroud)

如何清理这段代码以使其更灵活?搜索许多日志序列解决方案,现有库和我自己的试验和错误并不是很有成效.

理想情况下,我想将From,To和NumberOfMinorIntervals作为参数输入到一个更简单的表达式中.

flo*_*del 52

我喜欢这一个:

c(2:10 %o% 10^(3:7))
Run Code Online (Sandbox Code Playgroud)

  • 现在很短!我修改了第一个序列以包括中断数: `c(seq(2,10,10/10) %o% 10^(3:7))` 或最终类似的内容... `c(seq( 2,10, 10/NumBreaks) %o% 10^(从:到))` (2认同)
  • `%o%`是外部二进制产品,如下所示:http://cran.r-project.org/doc/manuals/R-lang.html#Operators (2认同)

Chr*_*ing 16

还有一个lseq()函数library("emdbook"),我只是复制/粘贴到我的代码中用于log-ticks:http://artax.karlin.mff.cuni.cz/r-help/library/emdbook/html/lseq.html

我已经编写了自己的函数来使用它:

lseq <- function(from=1, to=100000, length.out=6) {
  # logarithmic spaced sequence
  # blatantly stolen from library("emdbook"), because need only this
  exp(seq(log(from), log(to), length.out = length.out))
}
Run Code Online (Sandbox Code Playgroud)

lseq()然后回来1 10 100 1000 10000 100000


geo*_*ory 9

@flodel 很接近,但是(如@look-left 注释)由于初始序列不是日志,您会得到一个模式分布:

plot(c(2:10 %o% 10^(3:7)), log = 'y')
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

而只是seq指数:

plot(10^(seq(1,10,.2)), log = 'y')
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明