Sha256: 37e3313ebe0677f0bce804821aa351e505a8d97da6773ac46ba5e04ea41349d5

Contents?: true

Size: 1.11 KB

Versions: 1

Compression:

Stored size: 1.11 KB

Contents

module Rubyvis
  
  class Scale::Log < Rubyvis::Scale::Quantitative
    def initialize(*args)
      super(*args)
      @b=nil
      @_p=nil
      
      base(10)
    end
    def log(x)
      
      Math.log(x+1e15) / @_p
    end
    def pow(y)
      @b**y
    end
    def base(v=nil)
      if v
        @b=v
        @_p=Math.log(@b)
        transform(lambda {|x| log(x)}, lambda {|x| pow(x)})
        return self
      end
      return @b
    end
    def ticks
      d = domain
      n = d[0] < 0,
      i = (n ? -log(-d[0]) : log(d[0])).floor
      j = (n ? -log(-d[1]) : log(d[1])).ceil
      ticks = [];
      if n 
        ticks.push(-pow(-i))
        (i..j).each {|ii|
          ((b-1)...0).each {|k|
            ticks.push(-pow(-ii) * k)
          }
        }
      else
        (i...j).each {|ii|
          (1...b).each {|k|
            ticks.push(pow(i) * k)
          }
        }
        ticks.push(pow(i));
      end
      
      #for (i = 0; ticks[i] < d[0]; i++); // strip small values
      #for (j = ticks.length; ticks[j - 1] > d[1]; j--); // strip big values
      #return ticks.slice(i, j);
      ticks
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rubyvis-0.1.3 lib/rubyvis/scale/log.rb