GViz

GViz is a simple Ruby wrapper for the Google Visualization API

Usage

Definitions

chart_type
Google Visualization Chart Constructor
data
An array of objects that responds to [](key) i.e. and array of Hashes
mapping
An array of key, description pairs that we are using as data points for our chart

GViz::Base keeps track of charts that need to be rendered.

chart = GViz::Base.new
dom_id = chart.add_graph(chart_type, data, mapping, config_options)
chart.output

You can add multiple visualizations

chart = GViz::Base.new
dom_id1 = chart.add_graph(chart_type, data, mapping, config_options)
dom_id2 = chart.add_graph(chart_type, data, mapping, config_options)
chart.output

You can use dynamic adders

#chart_type for dynamic adders are lowercased and underscored
chart = GViz::Base.new
dom_id1 = chart.add_chart_type(data, mapping, config_options)
chart.output

Examples

AnnotatedTimeLine

mapping = [[:date, 'Date'],[:sold_pencils, 'Solid Pencils'], [:title1, 'title1'], [:text1, 'text1'], 
          [:sold_pens, 'Sold Pens'], [:title2, 'title2'], [:text2, 'text2']]

data = [
  {:date => "2008-02-01", :sold_pencils => 30000, :sold_pens => 40645},
  {:date => Date.parse("2008-02-02"), :sold_pencils => 14045, :sold_pens => 20374},
  {:date => Date.parse("2008-02-03"), :sold_pencils => 55022, :sold_pens => 50766},
  {:date => Date.parse("2008-02-04"), :sold_pencils => 75284, :sold_pens => 14334, :title2 => 'Out of Stock',:text2 => 'Ran out of stock on pens at 4pm'},
  {:date => Date.parse("2008-02-05"), :sold_pencils => 41476, :sold_pens => 66467, :title1 => 'Bought Pens',:text2 => 'Bought 200k pens'},
  {:date => Date.parse("2008-02-06"), :sold_pencils => 33322, :sold_pens => 39463, :title1 => 'Bought Pens',:text2 => 'Bought 200k pens'}
]

g = GViz::Base.new
chart_id = g.add_annotated_time_line(data, mapping)
puts g.output
puts "<div id='#{chart_id}'></div>"

Outputs

<script type='text/javascript' src='http://www.google.com/jsapi'></script>
<script type='text/javascript'>
  google.load('visualization', '1', {'packages':['annotatedtimeline']});
  google.setOnLoadCallback(drawChart);
  function drawChart() {    
      var data_0 = new google.visualization.DataTable();
      data_0.addColumn('date', 'Date')
      data_0.addColumn('number', 'Solid Pencils')
      data_0.addColumn('string', 'title1')
      data_0.addColumn('number', 'Sold Pens')
      data_0.addColumn('string', 'title2')
      data_0.addColumn('string', 'text2')
      data_0.addRows(6)
      data_0.setValue(0, 0, new Date(2008, 1, 1))
      data_0.setValue(0, 1, 30000)
      data_0.setValue(0, 2, '')
      data_0.setValue(0, 3, 40645)
      data_0.setValue(0, 4, '')
      data_0.setValue(0, 5, '')
      data_0.setValue(1, 0, new Date(2008, 1, 2))
      data_0.setValue(1, 1, 14045)
      data_0.setValue(1, 2, '')
      data_0.setValue(1, 3, 20374)
      data_0.setValue(1, 4, '')
      data_0.setValue(1, 5, '')
      data_0.setValue(2, 0, new Date(2008, 1, 3))
      data_0.setValue(2, 1, 55022)
      data_0.setValue(2, 2, '')
      data_0.setValue(2, 3, 50766)
      data_0.setValue(2, 4, '')
      data_0.setValue(2, 5, '')
      data_0.setValue(3, 0, new Date(2008, 1, 4))
      data_0.setValue(3, 1, 75284)
      data_0.setValue(3, 2, '')
      data_0.setValue(3, 3, 14334)
      data_0.setValue(3, 4, 'Out of Stock')
      data_0.setValue(3, 5, 'Ran out of stock on pens at 4pm')
      data_0.setValue(4, 0, new Date(2008, 1, 5))
      data_0.setValue(4, 1, 41476)
      data_0.setValue(4, 2, 'Bought Pens')
      data_0.setValue(4, 3, 66467)
      data_0.setValue(4, 4, '')
      data_0.setValue(4, 5, 'Bought 200k pens')
      data_0.setValue(5, 0, new Date(2008, 1, 6))
      data_0.setValue(5, 1, 33322)
      data_0.setValue(5, 2, 'Bought Pens')
      data_0.setValue(5, 3, 39463)
      data_0.setValue(5, 4, '')
      data_0.setValue(5, 5, 'Bought 200k pens')
      var chart_data_0 = new google.visualization.AnnotatedTimeline(document.getElementById('annotatedtimeline0'));
      chart_data_0.draw(data_0, {});
  }
</script>
<div id='annotatedtimeline0'></div>