Never been to DZone Snippets before?

Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world

Generate a graph using Gruff (See related posts)

This Ruby code produced a graph using gruff. The output shows a line graph [twitxr.com] for the different fruits. Source code origin: Gruff Update With Bar Graphs | Ruby on Rails for Newbies [rubyonrails.com]

require 'gruff'

g = Gruff::Line.new
g.title = "My Graph" 

g.data("Apples", [1, 2, 3, 4, 4, 3])
g.data("Oranges", [4, 8, 7, 9, 8, 9])
g.data("Watermelon", [2, 3, 1, 5, 6, 8])
g.data("Peaches", [9, 9, 10, 8, 7, 9])

g.labels = {0 => '2003', 2 => '2004', 4 => '2005'}

g.write('my_fruity_graph.png')


Note: I executed the code within an irb session on my Gentoo box. With Gentoo, Gruff was installed [gentoo-portage.com] using the command emerge -va gruff. I tried installing it on Ubuntu but ran into some difficulty, even with help from the article install rmagick ubuntu [dzone.com].

*udpate 21:48 24-Feb*

The following code does exactly as the same code above, however it uses XML to separate the data from the process, making it easier and more efficient to build graphs.
#!/usr/bin/ruby
# file: xml2gruff.rb

require 'rexml/document'
require 'gruff'
include REXML

class Xml2Gruff
  
  def initialize(filename)
    file = File.new(filename, 'r')
    doc = Document.new(file)
    # get the title
    @title = doc.root.elements['summary/title'].text
    
    @record = Hash.new
    # get each record
    doc.root.elements.each('records/item') {|item|
      avalues = Array.new
      item.elements.each('values/value') { |value| avalues << value.text.to_i }
      @record[item.elements['label'].text] = avalues
    }
    
    # get the summary labels
    @labels = Hash.new  
    doc.root.elements.each('summary/scale/label') {|l| @labels[l.elements['value'].text.to_i] = l.elements['title'].text} 
    
  end
  
  def save_line_graph(filename)

    g = Gruff::Line.new
    g.title = @title 
    @record.each {|label, data| g.data(label, data) }
    g.labels = @labels
    g.write(filename)

  end
end

if __FILE__ == $0
 x2g = Xml2Gruff.new('my_fruit.xml')
 x2g.save_line_graph('my_fruit2.png')
end


file: my_fruit.xml
<graph>
  <summary>
    <title>My Graph</title>
    <scale>
      <label><title>2003</title><value>0</value></label>
      <label><title>2004</title><value>2</value></label>
      <label><title>2005</title><value>4</value></label>
    </scale>
  </summary>
  <records>
    <item>
      <label>Apples</label>
      <values><value>1</value><value>2</value><value>3</value><value>4</value><value>4</value><value>3</value></values>
    </item>
    <item>
      <label>Oranges</label>
      <values><value>4</value><value>8</value><value>7</value><value>9</value><value>8</value><value>9</value></values>
    </item>
    <item>
      <label>Watermelon</label>
      <values><value>2</value><value>3</value><value>1</value><value>5</value><value>6</value><value>8</value></values>
    </item>
    <item>
      <label>Peaches</label>
      <values><value>9</value><value>9</value><value>10</value><value>8</value><value>7</value><value>9</value></values>
    </item>
  </records>
</graph>

Reference: gruff's gruff-0.2.9 Documentation [rubyforge.org]
to ruby rmagick image ubuntu gentoo magick graph chart gruff by jrobertson on Sun Feb 24 13:52:14 -0500 2008

Comments on this post

Stone posts on Sep 09, 2009 at 12:55
Thanks for sharing nice code with us i was looking for this from ages and got it here, thanks for making things easy now i can use it for my work and i think it will work well with me, i was here when i was looking for some good deals on low cost web hosting services services along with the cheap packages of business hosting services which are quite reliable and easy to use now you can get some exclusive packages of ecommerce hosts services which are more affordable and you can use them at home or office equally, thanks again for making this easy code and sharing with us.
asil posts on Oct 23, 2009 at 14:21
Thank you for sharing and technical informations. This article I want to share with my other friends. Regards.

----------------------------------
Chat, Chat odaları, Sohbet
ohyeah posts on Oct 29, 2009 at 10:33
Awesome! Need a pair of Nike Shoes? Im good at Jordan Shoes FAQ and also the Nike Shoes, so if you’re ready to buy a pair nike shoes or Jordan Shoes, I can help you something, if you just like the UGG Boots, I have no way to do that XD! See you then..
ohyeah posts on Nov 02, 2009 at 01:54
Sounds good! I wonder if you like the basketball games? Im the sneaker collector, and I like Basketball Shoes so much. That’s why you saw me here. Also, my sister ask me to find some UGG Boots useful news, can you help me? Thanks!
hanyu posts on Nov 05, 2009 at 06:10


are located in all major cities such as Shanghai,replica handbags
replica bags
ed hardy
ed hardy clothing
ralph lauren polo
juicy couture New York, etc, you may travel to these cities and get one for yourself.
hanyu posts on Nov 05, 2009 at 06:20

Anyone know near by? I amreplica handbags
replica bags
ed hardy
ed hardy clothing
ralph lauren polo
juicy couture looking for one but never get.

You need to create an account or log in to post comments to this site.


Click here to browse all 7286 code snippets

Related Posts