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