Class: Gruff::StackedBar
- Includes:
- StackedMixin
- Defined in:
- lib/gruff/stacked_bar.rb
Direct Known Subclasses
Constant Summary
Constants inherited from Base
Base::DATA_COLOR_INDEX, Base::DATA_LABEL_INDEX, Base::DATA_VALUES_INDEX, Base::DEBUG, Base::DEFAULT_MARGIN, Base::DEFAULT_TARGET_WIDTH, Base::LABEL_MARGIN, Base::LEGEND_MARGIN, Base::THOUSAND_SEPARATOR
Instance Attribute Summary collapse
-
#bar_spacing ⇒ Object
Spacing factor applied between bars.
Attributes inherited from Base
#additional_line_values, #bottom_margin, #center_labels_over_point, #colors, #font, #font_color, #has_left_labels, #hide_legend, #hide_line_markers, #hide_line_numbers, #hide_title, #labels, #left_margin, #legend_box_size, #legend_font_size, #legend_margin, #marker_color, #marker_count, #marker_font_size, #maximum_value, #minimum_value, #no_data_message, #right_margin, #sort, #stacked, #title, #title_font_size, #title_margin, #top_margin, #x_axis_label, #y_axis_increment, #y_axis_label
Instance Method Summary collapse
-
#draw ⇒ Object
Draws a bar graph, but multiple sets are stacked on top of each other.
Methods inherited from Base
#add_color, #data, #initialize, #initialize_ivars, #margins=, #replace_colors, #theme=, #theme_37signals, #theme_greyscale, #theme_keynote, #theme_odeo, #theme_pastel, #theme_rails_keynote, #to_blob, #write
Methods included from Deprecated
#graph_height, #graph_left, #graph_top, #graph_width, #scale_measurements, #total_height
Constructor Details
This class inherits a constructor from Gruff::Base
Instance Attribute Details
#bar_spacing ⇒ Object
Spacing factor applied between bars
9 10 11 |
# File 'lib/gruff/stacked_bar.rb', line 9 def @bar_spacing end |
Instance Method Details
#draw ⇒ Object
Draws a bar graph, but multiple sets are stacked on top of each other.
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/gruff/stacked_bar.rb', line 12 def draw get_maximum_by_stack super return unless @has_data # Setup spacing. # # Columns sit stacked. @bar_spacing ||= 0.9 @bar_width = @graph_width / @column_count.to_f padding = (@bar_width * (1 - @bar_spacing)) / 2 @d = @d.stroke_opacity 0.0 height = Array.new(@column_count, 0) @norm_data.each_with_index do |data_row, row_index| data_row[DATA_VALUES_INDEX].each_with_index do |data_point, point_index| @d = @d.fill data_row[DATA_COLOR_INDEX] # Calculate center based on bar_width and current row label_center = @graph_left + (@bar_width * point_index) + (@bar_width * @bar_spacing / 2.0) draw_label(label_center, point_index) next if (data_point == 0) # Use incremented x and scaled y left_x = @graph_left + (@bar_width * point_index) + padding left_y = @graph_top + (@graph_height - data_point * @graph_height - height[point_index]) + 1 right_x = left_x + @bar_width * @bar_spacing right_y = @graph_top + @graph_height - height[point_index] - 1 # update the total height of the current stacked bar height[point_index] += (data_point * @graph_height ) @d = @d.rectangle(left_x, left_y, right_x, right_y) end end @d.draw(@base_image) end |