lib/everyday-cli-utils/histogram.rb in everyday-cli-utils-0.0.2 vs lib/everyday-cli-utils/histogram.rb in everyday-cli-utils-0.1.0
- old
+ new
@@ -1,43 +1,7 @@
-require_relative 'maputil'
+require_relative 'safe/histogram'
-module EverydayCliUtils
- class Histogram
- def self.setup(collection, height, width)
- mi = collection.min
- ma = collection.max
- diff = ma - mi
- step = diff.to_f / (width.to_f - 1)
- counts = Array.new(width, 0)
- collection.each { |v| counts[((v - mi).to_f / step.to_f).floor] += 1 }
- max_y = counts.max
- lines = Array.new(height) { ' ' * width }
- return counts, lines, max_y, mi, step
- end
-
- def self.add_graph(counts, height, lines, max_y, width)
- (0...width).each { |i|
- h = ((counts[i].to_f / max_y.to_f) * height.to_f).round
- ((height - h)...height).each { |j|
- lines[j][i] = '#'
- }
- if h == 0 && counts[i] > 0
- lines[height - 1][i] = '_'
- end
- }
- end
-
- def self.add_averages(height, ks, lines, mi, step, width)
- lines[height] = ' ' * width
- ks.each { |v| lines[height][((v - mi) / step).to_i] = '|' }
- end
- end
-end
-
module Enumerable
def histogram(ks = nil, width = 100, height = 50)
- counts, lines, max_y, mi, step = EverydayCliUtils::Histogram.setup(self, height, width)
- EverydayCliUtils::Histogram.add_graph(counts, height, lines, max_y, width)
- EverydayCliUtils::Histogram.add_averages(height, ks, lines, mi, step, width) unless ks.nil?
- lines
+ EverydayCliUtils::Histogram.histogram(self, ks, width, height)
end
end
\ No newline at end of file