为了在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))
这是快速而又脏的,但它以日志间隔给出了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
如何清理这段代码以使其更灵活?搜索许多日志序列解决方案,现有库和我自己的试验和错误并不是很有成效。
理想情况下,我想将From,To和NumberOfMinorIntervals作为参数输入到更简单的表达式中。
答案 0 :(得分:49)
我喜欢这个:
c(2:10 %o% 10^(3:7))
答案 1 :(得分:16)
lseq()
中还有一个library("emdbook")
函数,我只是将其复制/粘贴到我的代码中以进行日志刻度: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))
}
运行lseq()
然后返回1 10 100 1000 10000 100000
答案 2 :(得分:1)
不确定这是否足够通用,但此功能至少应该是一个开始
logbreaks<-function(from=3, to=7, m=10) {
unlist(lapply(3:7, function(x) seq(2*10^x, 10*10^x, length.out=m-1)), )
}
#generate your data
logbreaks(3,7,10)
to / from参数作为10的指数。并且次要休息的次数比休息向量的实际长度多一个。
答案 3 :(得分:1)
@flodel很近,但是(如@ look-left所示)由于初始序列未记录,因此您会得到模式分布:
plot(c(2:10 %o% 10^(3:7)), log = 'y')
代替seq
指数:
plot(10^(seq(1,10,.2)), log = 'y')
答案 4 :(得分:0)
这个会自动计算<div class="form-group">
<label for="position">Position</label>
<?php
echo form_open('signup');
$options = array(
'' => 'Select Position',
'Department Chair' => 'Department Chair',
'Professor' => 'Professor',
'Guidance Faculty' => 'Guidance Faculty',
'OSA Faculty' => 'OSA Faculty',
);
echo "<div class='drop_pos'>";
echo form_dropdown('position', $options, 'class="btn dropdown-toggle"', 'data-toggle="dropdown-menu"');
?>
<div class="text-danger"><?php echo form_error('position');?></div>
</div>
</div>
<div class="form-group">
<label for="department">Department</label>
<input class="form-control" name="department" placeholder="Department" type="text" value="<?php echo set_value('Department');?>"/>
<span class="text-danger"><?php echo form_error('department');?></span>
</div>
并支持length.out
以确定增量有点类似于by
答案结合了@Christoph Safferling和https://stackoverflow.com/a/5237650/2480079
的解决方案seq()
示例:
lseqBy <- function(from=1, to=100000, by=1, length.out=log10(to/from)+1) {
tmp <- exp(seq(log(from), log(to), length.out = length.out))
tmp[seq(1, length(tmp), by)]
}