Method: UnicodePlot::Boxplot#print_row

Defined in:
lib/unicode_plot/boxplot.rb


44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/unicode_plot/boxplot.rb', line 44

def print_row(out, row_index)
  check_row_index(row_index)
  series = @data[(row_index / 3.0).to_i]

  series_row = row_index % 3

  min_char       = ['╷', '├' , '╵'][series_row]
  line_char      = [' ', '─' , ' '][series_row]
  left_box_char  = ['┌', '┤' , '└'][series_row]
  line_box_char  = ['─', ' ' , '─'][series_row]
  median_char    = ['┬', '│' , '┴'][series_row]
  right_box_char = ['┐', '├' , '┘'][series_row]
  max_char       = ['╷', '┤' , '╵'][series_row]

  line = (0 ... @width).map { ' ' }

  # Draw shapes first - this is most important,
  # so they'll always be drawn even if there's not enough space

  transformed = transform(series)
  line[transformed[0] - 1] = min_char
  line[transformed[1] - 1] = left_box_char
  line[transformed[2] - 1] = median_char
  line[transformed[3] - 1] = right_box_char
  line[transformed[4] - 1] = max_char

  (transformed[0] ... (transformed[1] - 1)).each do |i|
    line[i] = line_char
  end
  (transformed[1] ... (transformed[2] - 1)).each do |i|
    line[i] = line_box_char
  end
  (transformed[2] ... (transformed[3] - 1)).each do |i|
    line[i] = line_box_char
  end
  (transformed[3] ... (transformed[4] - 1)).each do |i|
    line[i] = line_char
  end

  print_styled(out, line.join(''), color: @color)
end