class BarChart

Attributes

base_line[R]
group_count[R]
max_value[R]
min_value[R]
set_count[R]
total_bar_count[R]

Public Instance Methods

all_bars_width() click to toggle source
# File lib/charts/bar_chart/bar_chart.rb, line 95
def all_bars_width
  (vertical? ? inner_width : inner_height) - sum_of_group_margins
end
bar_inner_width() click to toggle source
# File lib/charts/bar_chart/bar_chart.rb, line 87
def bar_inner_width
  bar_outer_width - 2 * bar_margin
end
bar_outer_width() click to toggle source
# File lib/charts/bar_chart/bar_chart.rb, line 91
def bar_outer_width
  all_bars_width.to_f / total_bar_count
end
calc_base_line() click to toggle source
# File lib/charts/bar_chart/bar_chart.rb, line 119
def calc_base_line
  [[normalize(0), 0].max, 1].min # zero value normalized and clamped between 0 and 1
end
calc_max() click to toggle source
# File lib/charts/bar_chart/bar_chart.rb, line 107
def calc_max
  max = data.map{ |d| d.reject(&:nil?).max }.max
  max = 0 if max < 0 && include_zero
  options[:max] || max
end
calc_min() click to toggle source
# File lib/charts/bar_chart/bar_chart.rb, line 113
def calc_min
  min = data.map{ |d| d.reject(&:nil?).min }.min
  min = 0 if min > 0 && include_zero
  options[:min] || min
end
default_options() click to toggle source
Calls superclass method Charts::Chart#default_options
# File lib/charts/bar_chart/bar_chart.rb, line 21
def default_options
  super.merge(
    width:        600,
    height:       400,
    include_zero: true,
    group_margin: 20,
    bar_margin:   3,
    label_height: 20,
    label_margin: 10,
    direction:    :vertical
  )
end
draw() click to toggle source
# File lib/charts/bar_chart/bar_chart.rb, line 74
def draw
  prepared_data.each_with_index do |set, set_nr|
    set.each_with_index do |data_value, bar_nr_in_set|
      bar_class = vertical? ? VerticalBar : HorizontalBar
      bar_class.new(self, data_value, set_nr, bar_nr_in_set).draw unless data_value.nil?
    end
  end
end
draw_group_labels() click to toggle source
# File lib/charts/bar_chart/bar_chart.rb, line 54
def draw_group_labels
  return if options[:group_labels].nil? || group_labels.empty?
  raise ArgumentError if group_labels.count != group_count
  group_label_style = {
    text_anchor:  'middle',
    writing_mode: (vertical? ? 'lr' : 'tb'),
    class:        'group_label'
  }
  group_labels.each_with_index do |group_label, i|
    if vertical?
      x = outer_margin + (i + 0.5) * all_bars_width / group_count + i * group_margin
      y = outer_margin + inner_height + renderer.font_size
    else
      x = outer_margin - renderer.font_size
      y = outer_margin + (i + 0.5) * all_bars_width / group_count + i * group_margin
    end
    renderer.text group_label, x, y, group_label_style
  end
end
initialize_instance_variables() click to toggle source
# File lib/charts/bar_chart/bar_chart.rb, line 12
def initialize_instance_variables
  @set_count = data.count
  @group_count = data.map(&:count).max
  @total_bar_count = set_count * group_count
  @max_value = calc_max
  @min_value = calc_min
  @base_line = calc_base_line
end
inner_height() click to toggle source
# File lib/charts/bar_chart/bar_chart.rb, line 103
def inner_height
  height - 2 * outer_margin - label_total_height
end
inner_width() click to toggle source
# File lib/charts/bar_chart/bar_chart.rb, line 83
def inner_width
  width - 2 * outer_margin
end
normalize(value) click to toggle source
# File lib/charts/bar_chart/bar_chart.rb, line 123
def normalize(value)
  (value.to_f - min_value) / (max_value - min_value)
end
pre_draw() click to toggle source
Calls superclass method Charts::Chart#pre_draw
# File lib/charts/bar_chart/bar_chart.rb, line 47
def pre_draw
  super
  draw_grid
  draw_group_labels
  draw_labels
end
prepare_data() click to toggle source
# File lib/charts/bar_chart/bar_chart.rb, line 39
def prepare_data
  data.map do |set|
    set.map do |value|
      value.nil? ? nil : normalize(value)
    end
  end
end
sum_of_group_margins() click to toggle source
# File lib/charts/bar_chart/bar_chart.rb, line 99
def sum_of_group_margins
  (group_count - 1) * group_margin
end
validate_arguments(data, options) click to toggle source
Calls superclass method Charts::Chart#validate_arguments
# File lib/charts/bar_chart/bar_chart.rb, line 34
def validate_arguments(data, options)
  super(data, options)
  raise ArgumentError unless data.is_a? Array
end
vertical?() click to toggle source
# File lib/charts/bar_chart/bar_chart.rb, line 127
def vertical?
  direction == :vertical
end