Sha256: 9474ee691c46d6fcdd23bbc34988c20449ea002c1600864fe9d2b797210955fc

Contents?: true

Size: 1.66 KB

Versions: 1

Compression:

Stored size: 1.66 KB

Contents

require File.dirname(__FILE__) + '/base'

class Gruff::StackedBar < Gruff::Base

    def draw
      super

      return unless @has_data

      # Setup spacing.
      #
      # Columns sit stacked.
      spacing_factor = 0.9
      @bar_width = @graph_width / @column_count.to_f
    
      @d = @d.stroke_opacity 0.0
      
      height = Array.new(@column_count, 0)
    
      @norm_data.each_with_index do |data_row, row_index|
        @d = @d.fill current_color
      
        data_row[1].each_with_index do |data_point, point_index|
          # Use incremented x and scaled y
          left_x = @graph_left + (@bar_width * point_index)
          left_y = @graph_top + (@graph_height -
                                 data_point * @graph_height - 
                                 height[point_index]) + 1
          right_x = left_x + @bar_width * spacing_factor
          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 - 2)
          
          @d = @d.rectangle(left_x, left_y, right_x, right_y)
          
          # Calculate center based on bar_width and current row
          label_center = @graph_left + (@bar_width * point_index) + (@bar_width * spacing_factor / 2.0)
          draw_label(label_center, point_index)
        end

        increment_color()
      end
    
      @d.draw(@base_image)    
    end
    
    protected
    
    def larger_than_max?(data_point, index=0)
      max(data_point, index) > @maximum_value
    end
    
    def max(data_point, index)
      @data.inject(0) {|sum, item| sum + item[1][index]}
    end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
gruff-0.0.7 lib/gruff/stacked_bar.rb