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