Sha256: 389c279d57140bad46f82b22de1af9c5b6c52286ba74dd5df5e90deea1272911

Contents?: true

Size: 1.94 KB

Versions: 18

Compression:

Stored size: 1.94 KB

Contents

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

class Gruffy::StackedBar < Gruffy::Base
    include StackedMixin

    # Spacing factor applied between bars
    attr_accessor :bar_spacing

    # Number of pixels between bar segments
    attr_accessor :segment_spacing
    
    # Draws a bar graph, but multiple sets are stacked on top of each other.
    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

end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
gruffy-1.2.3 lib/gruffy/stacked_bar.rb
gruffy-1.2.2 lib/gruffy/stacked_bar.rb
gruffy-1.2.1 lib/gruffy/stacked_bar.rb
gruffy-1.2.0 lib/gruffy/stacked_bar.rb
gruffy-1.1.0 lib/gruffy/stacked_bar.rb
gruffy-1.0.4 lib/gruffy/stacked_bar.rb
gruffy-1.0.3 lib/gruffy/stacked_bar.rb
gruffy-1.0.2 lib/gruffy/stacked_bar.rb
gruffy-1.0.1 lib/gruffy/stacked_bar.rb
gruffy-1.0.0 lib/gruffy/stacked_bar.rb
gruffy-0.1.2 lib/gruffy/stacked_bar.rb
gruffy-0.1.1 lib/gruffy/stacked_bar.rb
gruffy-0.1.0 lib/gruffy/stacked_bar.rb
gruffy-0.0.7 lib/gruffy/stacked_bar.rb
gruffy-0.0.6 lib/gruffy/stacked_bar.rb
gruffy-0.0.5 lib/gruffy/stacked_bar.rb
gruffy-0.0.4 lib/gruffy/stacked_bar.rb
gruffy-0.0.3 lib/gruffy/stacked_bar.rb