### Home Classes Methods

### In Files

- lib/SVG/Graph/BarHorizontal.rb

### Parent

BarBase

### Methods

- #draw_data
- #get_x_labels
- #get_y_labels
- #set_defaults
- #y_label_offset

### Class/Module Index

Quicksearch

- SVG
- SVG::Graph
- SVG::Graph::Bar
- SVG::Graph::BarBase
- SVG::Graph::BarHorizontal
- SVG::Graph::Graph
- SVG::Graph::Line
- SVG::Graph::Pie
- SVG::Graph::Plot
- SVG::Graph::Schedule
- SVG::Graph::TimeSeries
- DataPoint
- Object

No matching classes.

# SVG::Graph::BarHorizontal

### Create presentation quality SVG horitonzal bar graphs easily

# Synopsis

    require 'SVG/Graph/BarHorizontal'

    fields = %w(Jan Feb Mar)
    data_sales_02 = [12, 45, 21]

    graph = SVG::Graph::BarHorizontal.new({
      :height => 500,
      :width => 300,
      :fields => fields,
    })

    graph.add_data({
      :data => data_sales_02,
      :title => 'Sales 2002',
    })

    print "Content-type: image/svg+xml\r\n\r\n"
    print graph.burn

# Description

This object aims to allow you to easily create high quality SVG horitonzal bar graphs. You can either use the default style sheet or supply your own. Either way there are many options which can be configured to give you control over how the graph is generated - with or without a key, data elements at each point, title, subtitle etc.

# Examples

- germane-software.com/repositories/public/SVG/test/test.rb

# See also

- SVG::Graph::Graph

- SVG::Graph::Bar

- SVG::Graph::Line

- SVG::Graph::Pie

- SVG::Graph::Plot

- SVG::Graph::TimeSeries

## Author

Sean E. Russell <serATgermaneHYPHENsoftwareDOTcom>

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

### Public Instance Methods

set_defaults() click to toggle source

In addition to the defaults set in BarBase::set_defaults, sets

rotate_y_labels

  true

show_x_guidelines

  true

show_y_guidelines

  false

    # File lib/SVG/Graph/BarHorizontal.rb, line 63
    def set_defaults
      super
      init_with(
        :rotate_y_labels    => true,
        :show_x_guidelines  => true,
        :show_y_guidelines  => false
      )
      self.right_align = self.right_font = 1
    end

### Protected Instance Methods

draw_data() click to toggle source

    # File lib/SVG/Graph/BarHorizontal.rb, line 103
    def draw_data
      minvalue = min_value
      fieldheight = field_height

      unit_size = (@graph_width.to_f - font_size*2*right_font ) /
                      (get_x_labels.max - get_x_labels.min )
      bargap = bar_gap ? (fieldheight < 10 ? fieldheight / 2 : 10) : 0

      bar_height = fieldheight - bargap
      bar_height /= @data.length if stack == :side
      y_mod = (bar_height / 2) + (font_size / 2)

      field_count = 1
      @config[:fields].each_index { |i|
        dataset_count = 0
        for dataset in @data
          value = dataset[:data][i]

          top = @graph_height - (fieldheight * field_count)
          top += (bar_height * dataset_count) if stack == :side
          # cases (assume 0 = +ve):
          #   value  min  length          left
          #    +ve   +ve  value.abs - min minvalue.abs
          #    +ve   -ve  value.abs - 0   minvalue.abs
          #    -ve   -ve  value.abs - 0   minvalue.abs + value
          length = (value.abs - (minvalue > 0 ? minvalue : 0)) * unit_size
          left = (minvalue.abs + (value < 0 ? value : 0)) * unit_size

          @graph.add_element( "rect", {
            "x" => left.to_s,
            "y" => top.to_s,
            "width" => length.to_s,
            "height" => bar_height.to_s,
            "class" => "fill#{dataset_count+1}"
          })

          make_datapoint_text(
            left+length+5, top+y_mod, value, "text-anchor: start; "
            )
          dataset_count += 1
        end
        field_count += 1
      }
    end

get_x_labels() click to toggle source

    # File lib/SVG/Graph/BarHorizontal.rb, line 75
    def get_x_labels
      maxvalue = max_value
      minvalue = min_value
      range = maxvalue - minvalue
      top_pad = range == 0 ? 10 : range / 20.0
      scale_range = (maxvalue + top_pad) - minvalue

      scale_division = scale_divisions || (scale_range / 10.0)

      if scale_integers
        scale_division = scale_division < 1 ? 1 : scale_division.round
      end

      rv = []
      maxvalue = maxvalue%scale_division == 0 ?
        maxvalue : maxvalue + scale_division
      minvalue.step( maxvalue, scale_division ) {|v| rv << v}
      return rv
    end

get_y_labels() click to toggle source

    # File lib/SVG/Graph/BarHorizontal.rb, line 95
    def get_y_labels
      @config[:fields]
    end

y_label_offset( height ) click to toggle source

    # File lib/SVG/Graph/BarHorizontal.rb, line 99
    def y_label_offset( height )
      height / -2.0
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.