Class: Gruff::SideStackedBar
Constant Summary
Constants inherited from Base
Base::DATA_COLOR_INDEX, Base::DATA_LABEL_INDEX, Base::DATA_VALUES_INDEX, Base::DEBUG, Base::LEGEND_MARGIN, Base::TOP_MARGIN
Constants included from Magick
Magick::BoldWeight, Magick::CenterGravity, Magick::EastGravity, Magick::NormalWeight, Magick::NorthEastGravity, Magick::NorthGravity, Magick::NorthWestGravity, Magick::SouthEastGravity, Magick::SouthGravity, Magick::SouthWestGravity, Magick::WestGravity
Instance Attribute Summary
Attributes inherited from Base
#additional_line_values, #colors, #font, #hide_legend, #hide_line_markers, #hide_title, #labels, #legend_font_size, #marker_color, #marker_count, #marker_font_size, #maximum_value, #minimum_value, #no_data_message, #stacked, #title, #title_font_size, #x_axis_label, #y_axis_increment, #y_axis_label
Instance Method Summary collapse
- #draw ⇒ Object
-
#draw_label(y_offset, index) ⇒ Object
instead of base class version, modified to enable us to draw on the Y axis instead of X.
-
#draw_line_markers ⇒ Object
instead of base class version, draws vertical background lines and label.
Methods inherited from Base
#add_color, #data, #initialize, #replace_colors, #theme=, #theme_37signals, #theme_keynote, #theme_odeo, #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 Method Details
#draw ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/gruff/side_stacked_bar.rb', line 61 def draw get_maximum_by_stack super return unless @has_data # Setup spacing. # # Columns sit stacked. spacing_factor = 0.9 @bar_width = @graph_height / @column_count.to_f @d = @d.stroke_opacity 0.0 height = Array.new(@column_count, 0) length = Array.new(@column_count, @graph_left) @norm_data.each_with_index do |data_row, row_index| @d = @d.fill data_row[DATA_COLOR_INDEX] data_row[1].each_with_index do |data_point, point_index| ## using the original calcs from the stacked bar chart to get the difference between ## part of the bart chart we wish to stack. temp1 = @graph_left + (@graph_width - data_point * @graph_width - height[point_index]) + 1 temp2 = @graph_left + @graph_width - height[point_index] - 1 difference = temp2 - temp1 left_x = length[point_index] #+ 1 left_y = @graph_top + (@bar_width * point_index) right_x = left_x + difference right_y = left_y + @bar_width * spacing_factor length[point_index] += difference height[point_index] += (data_point * @graph_width - 2) @d = @d.rectangle(left_x, left_y, right_x, right_y) # Calculate center based on bar_width and current row label_center = @graph_top + (@bar_width * point_index) + (@bar_width * spacing_factor / 2.0) draw_label(label_center, point_index) end end @d.draw(@base_image) end |
#draw_label(y_offset, index) ⇒ Object
instead of base class version, modified to enable us to draw on the Y axis instead of X
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/gruff/side_stacked_bar.rb', line 45 def draw_label(y_offset, index) if !@labels[index].nil? && @labels_seen[index].nil? @d.fill = @marker_color @d.font = @font if @font @d.stroke = 'transparent' @d.font_weight = NormalWeight @d.pointsize = scale_fontsize(@marker_font_size) @d.gravity = CenterGravity @d = @d.annotate_scaled(@base_image, 1, 1, @graph_left / 2, y_offset, @labels[index], @scale) @labels_seen[index] = 1 end end |
#draw_line_markers ⇒ Object
instead of base class version, draws vertical background lines and label
11 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 |
# File 'lib/gruff/side_stacked_bar.rb', line 11 def draw_line_markers return if @hide_line_markers # Draw horizontal line markers and annotate with numbers @d = @d.stroke(@marker_color) @d = @d.stroke_width 1 number_of_lines = 5 # TODO Round maximum marker value to a round number like 100, 0.1, 0.5, etc. increment = significant(@maximum_value.to_f / number_of_lines) (0..number_of_lines).each do |index| line_diff = (@graph_right - @graph_left) / number_of_lines x = @graph_right - (line_diff * index) - 1 @d = @d.line(x, @graph_bottom, x, @graph_top) diff = index - number_of_lines marker_label = diff.abs * increment @d.fill = @marker_color @d.font = @font if @font @d.stroke = 'transparent' @d.pointsize = scale_fontsize(@marker_font_size) # @d.gravity = NorthGravity @d = @d.annotate_scaled( @base_image, 100, 20, x - (@marker_font_size/1.5), @graph_bottom + 40, marker_label.to_s, @scale) end end |