Class: Gruffy::StackedBar
- Includes:
- StackedMixin
- Defined in:
- lib/gruffy/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::DATA_VALUES_X_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.
-
#segment_spacing ⇒ Object
Number of pixels between bar segments.
Attributes inherited from Base
#additional_line_values, #background_label_height, #bold_title, #bottom_margin, #center_labels_over_point, #colors, #font, #font_color, #has_left_labels, #hide_legend, #hide_line_markers, #hide_line_numbers, #hide_title, #label_formatting, #label_max_size, #label_rotation, #label_stagger_height, #label_truncation_style, #label_y_axis, #labels, #left_margin, #legend_at_bottom, #legend_box_size, #legend_font_size, #legend_margin, #marker_color, #marker_count, #marker_font_size, #marker_shadow_color, #maximum_value, #minimum_value, #no_data_message, #right_margin, #show_labels_for_bar_values, #sort, #sorted_drawing, #stacked, #title, #title_font, #title_font_size, #title_margin, #top_margin, #use_data_label, #x_axis_increment, #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 Gruffy::Base
Instance Attribute Details
#bar_spacing ⇒ Object
Spacing factor applied between bars
9 10 11 |
# File 'lib/gruffy/stacked_bar.rb', line 9 def @bar_spacing end |
#segment_spacing ⇒ Object
Number of pixels between bar segments
12 13 14 |
# File 'lib/gruffy/stacked_bar.rb', line 12 def segment_spacing @segment_spacing end |
Instance Method Details
#draw ⇒ Object
Draws a bar graph, but multiple sets are stacked on top of each other.
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 56 57 58 59 |
# File 'lib/gruffy/stacked_bar.rb', line 15 def draw get_maximum_by_stack super return unless @has_data # Setup spacing. # # Columns sit stacked. @bar_spacing ||= 0.9 @segment_spacing ||= 1 @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]) + @segment_spacing right_x = left_x + @bar_width * @bar_spacing right_y = @graph_top + @graph_height - height[point_index] - @segment_spacing # 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 |