Get Version

0.2.6

Home
Documentation
RubyForge Project

Don’t Worry.

Be Scruffy.

Beautiful Graphs for Ruby.

What is Scruffy?

Scruffy is a Ruby library for generating attractive and powerful graphs, useful for web applications, print media and many others.

Scruffy’s key features include:

Installing

sudo gem install scruffy

Demonstration of usage

Pie Chart
    graph = Scruffy::Graph.new
    graph.title = "Favourite Snacks"
    graph.renderer = Scruffy::Renderers::Pie.new

    graph.add :pie, '', {
      'Apple' => 20,
      'Banana' => 100,
      'Orange' => 70,
      'Taco' => 30
    }

    graph.render :to => "pie_test.svg"
    graph.render :width => 300, :height => 200,
      :to => "pie_test.png", :as => 'png'

Line Graph
    graph = Scruffy::Graph.new
    graph.title = "Sample Line Graph"
    graph.renderer = Scruffy::Renderers::Standard.new

    graph.add :line, 'Example', [20, 100, 70, 30, 106]

    graph.render :to => "line_test.svg"
    graph.render  :width => 300, :height => 200,
      :to => "line_test.png", :as => 'png'

Bar Graph
    graph = Scruffy::Graph.new
    graph.title = "Sample Line Graph"
    graph.renderer = Scruffy::Renderers::Standard.new

    graph.add :line, 'Example', [20, 100, 70, 30, 106]

    graph.render :to => "line_test.svg"
    graph.render  :width => 300, :height => 200,
      :to => "line_test.png", :as => 'png'

Split Graph
    graph = Scruffy::Graph.new
    graph.title = "Long-term Comparisons"

    graph.value_formatter = Scruffy::Formatters::Currency.new(
      :special_negatives => true, :negative_color => '#ff7777')

    graph.renderer = Scruffy::Renderers::Split.new(
      :split_label => 'Northeastern (Top) / Central (Bottom)')

    graph.add :area, 'Jeff',
      [20, -5, 100, 70, 30, 106, 203, 100, 50, 203, 289, 20],
      :category => :top

    graph.add :area, 'Jerry',
      [-10, 70, 20, 102, 201, 26, 30, 106, 203, 100, 50, 39],
      :category => :top

    graph.add :bar,  'Jack',
      [30, 0, 49, 29, 100, 203, 70, 20, 102, 201, 26, 130],
      :category => :bottom

    graph.add :line, 'Brasten',
      [42, 10, 75, 150, 130, 70, -10, -20, 50, 92, -21, 19],
      :categories => [:top, :bottom]

    graph.add :line, 'Jim',
      [-10, -20, 50, 92, -21, 56, 92, 84, 82, 100, 39, 120],
      :categories => [:top, :bottom]
    graph.point_markers = ['Jan', 'Feb', 'Mar', 'Apr', 'May',
      'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
    
    graph.render :to => "split_test.svg"
    graph.render  :width => 500,
      :to => "split_test.png", :as => 'png'

Stacking Graph Types
    graph = Scruffy::Graph.new
    graph.title = "Comparative Agent Performance"
    graph.value_formatter = Scruffy::Formatters::Percentage.new(:precision => 0)
    graph.add :stacked do |stacked|
      stacked.add :bar, 'Jack', [30, 60, 49, 29, 100, 120]
      stacked.add :bar, 'Jill', [120, 240, 0, 100, 140, 20]
      stacked.add :bar, 'Hill', [10, 10, 90, 20, 40, 10]
    end
    graph.point_markers = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']
    graph.render :to => "stacking_test.svg"
    graph.render  :width => 500, :to => "stacking_test.png", :as => 'png'

Multi-viewport Multi-layered
    graph = Scruffy::Graph.new
    graph.title = "Some Kind of Information"
    graph.renderer = Scruffy::Renderers::Cubed.new

    graph.add :area, 'Jeff', [20, -5, 100, 70, 30, 106],
      :categories => [:top_left, :bottom_right]    
    graph.add :area, 'Jerry', [-10, 70, 20, 102, 201, 26],
      :categories => [:bottom_left, :buttom_right]
    graph.add :bar,  'Jack', [30, 0, 49, 29, 100, 203],
      :categories => [:bottom_left, :top_right]
    graph.add :line, 'Brasten', [42, 10, 75, 150, 130, 70],
      :categories => [:top_right, :bottom_left]
    graph.add :line, 'Jim', [-10, -20, 50, 92, -21, 56],
      :categories => [:top_left, :bottom_right]
    graph.point_markers = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']
    graph.render :to => "multi_test.svg"
    graph.render  :width => 500, :to => "multi_test.png", :as => 'png'

Source Code

The trunk repository is svn://rubyforge.org/var/svn/scruffy/trunk for anonymous access.

Rubyforge Project is here

News

License

This code is free to use under the terms of the MIT license.

Contact

Scruffy was created by Brasten Sager.

Collaborative work by A.J. Ostman.

23rd August 2009