Module: Colorize

Defined in:
lib/rbbt/util/colorize.rb

Class Method Summary collapse

Class Method Details

.continuous(array, start = :white, eend = :black) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/rbbt/util/colorize.rb', line 14

def self.continuous(array, start = :white, eend = :black) 
  start_color = Color.new from_name(start)
  end_color = Color.new from_name(eend)

  array = array.collect{|v| n = v.to_f; n = n > 100 ? 100 : n; n < 0.001 ? 0.001 : n}
  max = array.max
  min = array.min
  range = max - min
  array.collect do |v|
    ratio = (v-min) / range
    start_color.blend end_color, ratio
  end
end

.distinct(array) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/rbbt/util/colorize.rb', line 28

def self.distinct(array)
  colors = Rbbt.share.color["diverging_colors.hex"].list.collect{|c| Color.new c}

  num = array.uniq.length
  times = num / 12

  all_colors = colors.dup
  times.times do
    all_colors.concat  colors.collect{|n| n.darken(0.2) }
  end

  value_color = Hash[*array.uniq.zip(all_colors).flatten]

  value_color.values_at *array
end

.from_name(color) ⇒ Object



4
5
6
7
8
9
10
11
12
# File 'lib/rbbt/util/colorize.rb', line 4

def self.from_name(color)
  return color if color =~ /^#?[0-9A-F]+$/i
  case color.to_s
  when "white"
    '#000'
  when "black"
    '#fff'
  end
end

.tsv(tsv) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/rbbt/util/colorize.rb', line 44

def self.tsv(tsv)
  values = tsv.values.flatten
  if Fixnum === values.first or (values.first.to_f != 0 and values[0] != "0")
    value_colors = Misc.process_to_hash(values){continuous(values)}
  else
    value_colors = Misc.process_to_hash(values){distinct(values)}
  end

  if tsv.type == :single
    Hash[*tsv.keys.zip(value_colors.values_at(*values)).flatten]
  else
    Hash[*tsv.keys.zip(values.collect{|vs| value_colors.values_at(*vs)}).flatten]
  end
end