Skip to content

Instantly share code, notes, and snippets.

@jcromartie
Created November 15, 2011 13:37
Show Gist options
  • Star 16 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save jcromartie/1367091 to your computer and use it in GitHub Desktop.
Save jcromartie/1367091 to your computer and use it in GitHub Desktop.
Sparklines in Ruby
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
# prints a sparkline in the terminal using the supplied list of numbers
# examples:
# spark.rb 10 20 30 100 90 80
# spark.rb 1 2 0.4 0.1 1.3 0.7
@ticks = %w[▁ ▂ ▃ ▄ ▅ ▆ ▇]
values = ARGV.map { |x| x.to_f }
min, range, scale = values.min, values.max - values.min, @ticks.length - 1
puts values.map { |x| @ticks[(((x - min) / range) * scale).round] }.join
@judofyr
Copy link

judofyr commented Nov 15, 2011

This gives smoother ticks:

@ticks = %w[      ]

@jcromartie
Copy link
Author

Indeed. Thanks!

@newfoundresearch
Copy link

Small problem if range = 0...

@jcromartie
Copy link
Author

You're right @newfoundresearch. However, a sparkline for a dataset with a range of 0 wouldn't be very interesting anyway, would it? :)

@GarrisonJ
Copy link

@ticks = %w[      ]
values = ARGV.map { |x| x.to_f }
min, range, scale = values.min, values.max - values.min, @ticks.length - 1
if !(range == 0)
  puts values.map { |x| @ticks[(((x - min) / range) * scale).round] }.join
else
  puts values.map { |x| @ticks[1] }.join
end

Just in case range == 0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment