Generate a graph using Gruff
1 2 require 'gruff' 3 4 g = Gruff::Line.new 5 g.title = "My Graph" 6 7 g.data("Apples", [1, 2, 3, 4, 4, 3]) 8 g.data("Oranges", [4, 8, 7, 9, 8, 9]) 9 g.data("Watermelon", [2, 3, 1, 5, 6, 8]) 10 g.data("Peaches", [9, 9, 10, 8, 7, 9]) 11 12 g.labels = {0 => '2003', 2 => '2004', 4 => '2005'} 13 14 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.
1 2 #!/usr/bin/ruby 3 # file: xml2gruff.rb 4 5 require 'rexml/document' 6 require 'gruff' 7 include REXML 8 9 class Xml2Gruff 10 11 def initialize(filename) 12 file = File.new(filename, 'r') 13 doc = Document.new(file) 14 # get the title 15 @title = doc.root.elements['summary/title'].text 16 17 @record = Hash.new 18 # get each record 19 doc.root.elements.each('records/item') {|item| 20 avalues = Array.new 21 item.elements.each('values/value') { |value| avalues << value.text.to_i } 22 @record[item.elements['label'].text] = avalues 23 } 24 25 # get the summary labels 26 @labels = Hash.new 27 doc.root.elements.each('summary/scale/label') {|l| @labels[l.elements['value'].text.to_i] = l.elements['title'].text} 28 29 end 30 31 def save_line_graph(filename) 32 33 g = Gruff::Line.new 34 g.title = @title 35 @record.each {|label, data| g.data(label, data) } 36 g.labels = @labels 37 g.write(filename) 38 39 end 40 end 41 42 if __FILE__ == $0 43 x2g = Xml2Gruff.new('my_fruit.xml') 44 x2g.save_line_graph('my_fruit2.png') 45 end
file: my_fruit.xml
1 2 <graph> 3 <summary> 4 <title>My Graph</title> 5 <scale> 6 <label><title>2003</title><value>0</value></label> 7 <label><title>2004</title><value>2</value></label> 8 <label><title>2005</title><value>4</value></label> 9 </scale> 10 </summary> 11 <records> 12 <item> 13 <label>Apples</label> 14 <values><value>1</value><value>2</value><value>3</value><value>4</value><value>4</value><value>3</value></values> 15 </item> 16 <item> 17 <label>Oranges</label> 18 <values><value>4</value><value>8</value><value>7</value><value>9</value><value>8</value><value>9</value></values> 19 </item> 20 <item> 21 <label>Watermelon</label> 22 <values><value>2</value><value>3</value><value>1</value><value>5</value><value>6</value><value>8</value></values> 23 </item> 24 <item> 25 <label>Peaches</label> 26 <values><value>9</value><value>9</value><value>10</value><value>8</value><value>7</value><value>9</value></values> 27 </item> 28 </records> 29 </graph>
Reference: gruff's gruff-0.2.9 Documentation [rubyforge.org]
to ruby rmagick image ubuntu gentoo magick graph chart gruff by jrobertson on Feb 24, 2008