Class: Scruffy::Layers::Bar

Inherits:
Base
  • Object
show all
Defined in:
lib/scruffy/layers/bar.rb

Overview

Scruffy::Layers::Bar

Author

Brasten Sager

Date

August 6th, 2006

Standard bar graph.

Direct Known Subclasses

MultiBar

Instance Attribute Summary

Attributes inherited from Base

#color, #complexity, #height, #max_value, #min_value, #opacity, #options, #outline, #points, #preferred_color, #preferred_outline, #relevant_data, #title, #width

Instance Method Summary collapse

Methods inherited from Base

#bottom_key, #bottom_value, #initialize, #legend_data, #relevant_data?, #render, #sum_values, #top_key, #top_value

Constructor Details

This class inherits a constructor from Scruffy::Layers::Base

Instance Method Details

#draw(svg, coords, options = {}) ⇒ Object

Draw bar graph. Now handles positive and negative values gracefully.



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
# File 'lib/scruffy/layers/bar.rb', line 12

def draw(svg, coords, options = {})
  coords.each_with_index do |coord,idx|
    x, y, bar_height = (coord.first), coord.last, 1#(height - coord.last)
    
      valh = max_value + min_value * -1 #value_height
      maxh = max_value * height / valh #positive area height
      minh = min_value * height / valh #negative area height
      #puts "height = #{height} and max_value = #{max_value} and min_value = #{min_value} and y = #{y} and point = #{points[idx]}"
      if points[idx] > 0
        bar_height = points[idx]*maxh/max_value
      else
        bar_height = points[idx]*minh/min_value
      end
    
    #puts " y = #{y} and point = #{points[idx]}"  
    svg.g(:transform => "translate(-#{relative(0.5)}, -#{relative(0.5)})") {
      svg.rect( :x => x, :y => y, :width => @bar_width + relative(1), :height => bar_height + relative(1), 
                :style => "fill: black; fill-opacity: 0.15; stroke: none;" )
      svg.rect( :x => x+relative(0.5), :y => y+relative(2), :width => @bar_width + relative(1), :height => bar_height - relative(0.5), 
                :style => "fill: black; fill-opacity: 0.15; stroke: none;" )

    }
    
    svg.rect( :x => x, :y => y, :width => @bar_width, :height => bar_height, 
              :fill => color.to_s, 'style' => "opacity: #{opacity}; stroke: none;" )
  end
end