class SVG::Graph::BarBase

Synopsis

A superclass for bar-style graphs. Do not attempt to instantiate directly; use one of the subclasses instead.

Author

Sean E. Russell <serATgermaneHYPHENsoftwareDOTcom>

Copyright 2004 Sean E. Russell This software is available under the Ruby license

Attributes

bar_gap[RW]

Whether to have a gap between the bars or not, default is true, set to false if you don't want gaps.

show_actual_values[RW]

If true, display the actual field values in the data labels. Default: true

show_percent[RW]

If true, display the percentage value of each bar. Default: false

stack[RW]

How to stack data sets. :overlap overlaps bars with transparent colors, :top stacks bars on top of one another, :side stacks the bars side-by-side. Defaults to :overlap.

Public Class Methods

new(config) click to toggle source

Ensures that :fields are provided in the configuration.

Calls superclass method SVG::Graph::Graph::new
# File lib/SVG/Graph/BarBase.rb, line 20
def initialize config
  raise "fields was not supplied or is empty" unless config[:fields] &&
  config[:fields].kind_of?(Array) &&
  config[:fields].length > 0
  super
end

Public Instance Methods

set_defaults() click to toggle source

In addition to the defaults set in Graph::initialize, sets

bar_gap

true

stack

:overlap

# File lib/SVG/Graph/BarBase.rb, line 30
def set_defaults
  init_with( :bar_gap => true, :stack => :overlap, :show_percent => false, :show_actual_values => true)
end

Protected Instance Methods

field_width() click to toggle source

space in px between x-labels, we override the Graph version because we need the extra space (i.e. don't subtract 1 from get_x_labels.length)

# File lib/SVG/Graph/BarBase.rb, line 49
def field_width
  # don't use -1 otherwise bar is out of bounds
  @graph_width.to_f / ( get_x_labels.length )
end
get_css() click to toggle source
# File lib/SVG/Graph/BarBase.rb, line 70
      def get_css
        return <<EOL
/* default fill styles for multiple datasets (probably only use a single dataset on this graph though) */
.key1,.fill1{
        fill: #ff0000;
        fill-opacity: 0.5;
        stroke: none;
        stroke-width: 0.5px;
}
.key2,.fill2{
        fill: #0000ff;
        fill-opacity: 0.5;
        stroke: none;
        stroke-width: 1px;
}
.key3,.fill3{
        fill: #00ff00;
        fill-opacity: 0.5;
        stroke: none;
        stroke-width: 1px;
}
.key4,.fill4{
        fill: #ffcc00;
        fill-opacity: 0.5;
        stroke: none;
        stroke-width: 1px;
}
.key5,.fill5{
        fill: #00ccff;
        fill-opacity: 0.5;
        stroke: none;
        stroke-width: 1px;
}
.key6,.fill6{
        fill: #ff00ff;
        fill-opacity: 0.5;
        stroke: none;
        stroke-width: 1px;
}
.key7,.fill7{
        fill: #00ffff;
        fill-opacity: 0.5;
        stroke: none;
        stroke-width: 1px;
}
.key8,.fill8{
        fill: #ffff00;
        fill-opacity: 0.5;
        stroke: none;
        stroke-width: 1px;
}
.key9,.fill9{
        fill: #cc6666;
        fill-opacity: 0.5;
        stroke: none;
        stroke-width: 1px;
}
.key10,.fill10{
        fill: #663399;
        fill-opacity: 0.5;
        stroke: none;
        stroke-width: 1px;
}
.key11,.fill11{
        fill: #339900;
        fill-opacity: 0.5;
        stroke: none;
        stroke-width: 1px;
}
.key12,.fill12{
        fill: #9966FF;
        fill-opacity: 0.5;
        stroke: none;
        stroke-width: 1px;
}
EOL
      end
max_value() click to toggle source
# File lib/SVG/Graph/BarBase.rb, line 54
def max_value
  @data.collect{|x| x[:data].max}.max
end
min_value() click to toggle source
# File lib/SVG/Graph/BarBase.rb, line 58
def min_value
  min = 0
  if min_scale_value.nil?
    min = @data.collect{|x| x[:data].min}.min
    # by default bar should always start from zero unless there are negative values
    min = min > 0 ? 0 : min
  else
    min = min_scale_value
  end
  return min
end