gchartrb 0.5 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,13 +1,17 @@
1
- == 0.5
1
+ == 0.5.1 / 2007-12-12
2
+
3
+ * Added support for max_value method to specify maximum values to plot against
4
+
5
+ == 0.5 / 2007-12-12
2
6
 
3
7
  * Added Scatter Chart Support
4
8
  * Documentation Updates
5
9
 
6
- == 0.4.1
10
+ == 0.4.1 / 2007-12-12
7
11
 
8
12
  * Removed some spurious debug statements
9
13
 
10
- == 0.4
14
+ == 0.4 / 2007-12-12
11
15
 
12
16
  * Fixed issue when all data points are 0 in Line XY Chart (Thanks Cedric)
13
17
  * Proper calculation of max values for Line XY chart (Thanks Bryan Donovan)
data/Manifest.txt CHANGED
@@ -4,6 +4,7 @@ Manifest.txt
4
4
  README.txt
5
5
  Rakefile
6
6
  TODO
7
+ lib/example.rb
7
8
  lib/google_chart.rb
8
9
  lib/google_chart/bar_chart.rb
9
10
  lib/google_chart/base.rb
data/README.txt CHANGED
@@ -29,7 +29,6 @@ Download the latest release from http://code.google.com/p/gchartrb/downloads/lis
29
29
  == Problems/TODO
30
30
  The following features are pending :
31
31
 
32
- * Scatter Charts
33
32
  * Horizontal and Vertical range Markers
34
33
  * Line Styles
35
34
  * Shape Markers
data/Rakefile CHANGED
@@ -8,7 +8,7 @@ class Hoe
8
8
  def extra_deps; @extra_deps.reject { |x| Array(x).first == "hoe" } end
9
9
  end # copied from the Rakefile of the sup project
10
10
 
11
- Hoe.new('gchartrb', "0.5") do |p|
11
+ Hoe.new('gchartrb', "0.5.1") do |p|
12
12
  p.rubyforge_name = 'gchartrb'
13
13
  p.author = 'Deepak Jois'
14
14
  p.email = 'deepak.jois@gmail.com'
data/lib/example.rb ADDED
@@ -0,0 +1,70 @@
1
+ require 'google_chart'
2
+
3
+ # Some examples from http://24ways.org/2007/tracking-christmas-cheer-with-google-charts
4
+
5
+ # Pie Chart
6
+ pc = GoogleChart::PieChart.new("600x300", "Food and Drinks Consumed Christmas 2007")
7
+ pc.data "Egg nog", 10, '00AF33'
8
+ pc.data "Christmas Ham", 20, '4BB74C'
9
+ pc.data "Milk (not including egg nog)", 8, 'EE2C2C'
10
+ pc.data "Cookies", 25, 'CC3232'
11
+ pc.data "Roasted Chestnuts", 5, '33FF33'
12
+ pc.data "Chocolate", 3, '66FF66'
13
+ pc.data "Various Other Beverages", 15, '9AFF9A'
14
+ pc.data "Various Other Foods", 9, 'C1FFC1'
15
+ pc.data "Snacks", 5, 'CCFFCC'
16
+ puts pc.to_url
17
+
18
+ # Line Chart
19
+ x_axis_labels = (1..31).to_a.collect do |v|
20
+ if [1,6,25,26,31].member?(v)
21
+ if v == 1
22
+ "Dec 1st"
23
+ elsif v == 31
24
+ "Dec 31st"
25
+ elsif v
26
+ "#{v}th"
27
+ end
28
+ else
29
+ nil
30
+ end
31
+ end
32
+
33
+ y_axis_labels = (0..10).to_a.collect do |v|
34
+ val = 10 * v
35
+ if val ==50 or val == 100
36
+ val.to_s
37
+ else
38
+ nil
39
+ end
40
+ end
41
+
42
+ series_1_y = [30,45,20,50,15,80,60,70,40,55,80]
43
+ series_2_y = [50,10,30,55,60]
44
+
45
+ series_1_x = [1,6,8,10,18,23,25,26,28,29,31]
46
+ series_2_x = [1,4,6,9,11]
47
+
48
+ series_1_xy = []
49
+ series_2_xy = []
50
+
51
+ series_1_x.each_with_index do |v,i|
52
+ series_1_xy[i] = [v-1, series_1_y[i] ]
53
+ end
54
+
55
+ series_2_x.each_with_index do |v,i|
56
+ series_2_xy[i] = [v-1, series_2_y[i ] ]
57
+ end
58
+
59
+ puts series_1_xy.inspect
60
+ puts series_2_xy.inspect
61
+
62
+ lcxy = GoogleChart::LineChart.new('800x300', "Projected Christmas Cheer for 2007", true)
63
+ lcxy.data "2006", series_1_xy, '458B00'
64
+ lcxy.data "2007", series_2_xy, 'CD2626'
65
+ lcxy.max_value [30,100]
66
+ lcxy.data_encoding = :text
67
+ lcxy.axis :x, :labels => x_axis_labels
68
+ lcxy.axis :y, :labels => y_axis_labels
69
+ lcxy.grid :x_step => 3.333, :y_step => 10, :length_segment => 1, :length_blank => 3
70
+ puts lcxy.to_url
@@ -35,13 +35,12 @@ module GoogleChart
35
35
  end
36
36
 
37
37
  def process_data
38
- if @data.size > 1
39
- max_value = @data.flatten.max
38
+ if @data.size > 1
40
39
  join_encoded_data(@data.collect { |series|
41
- encode_data(series, max_value)
40
+ encode_data(series, max_data_value)
42
41
  })
43
42
  else
44
- encode_data(@data.flatten)
43
+ encode_data(@data.flatten,max_data_value)
45
44
  end
46
45
  end
47
46
 
@@ -51,7 +51,7 @@ module GoogleChart
51
51
  add_title if chart_title.to_s.length > 0
52
52
 
53
53
  params.merge!(extras)
54
- query_string = params.map { |k,v| "#{k}=#{URI.escape(v.to_s)}" }.join('&')
54
+ query_string = params.map { |k,v| "#{k}=#{URI.escape(v.to_s).gsub(/%20/,'+').gsub(/%7C/,'|')}" }.join('&')
55
55
  BASE_URL + query_string
56
56
  end
57
57
 
@@ -78,6 +78,29 @@ module GoogleChart
78
78
  @colors << color if color
79
79
  end
80
80
 
81
+ # Allows (optional) setting of a max value for the chart, which will be used for data encoding and axis plotting.
82
+ # The value to pass depends on the type of chart
83
+ # * For Line Chart and Bar Charts it should be a single integer or float value
84
+ # * For Scatter Charts and Line XY Charts, you MUST pass an array containing the maximum values for X and Y
85
+ #
86
+ # ==== Examples
87
+ # For bar charts
88
+ # bc.max_value 5 # 5 will be used to calculate the relative encoding values
89
+ # For scatter chart
90
+ # sc.max_value [5,6] # 5 is the max x value and 6 is the max y value
91
+ #
92
+ # Note : MAKE SURE you are passing the right values otherwise an exception will be raised
93
+ def max_value(value)
94
+ if [:lxy, :s].member?(self.chart_type) and value.is_a?(Array)
95
+ @max_x = value.first
96
+ @max_y = value.last
97
+ elsif [:lc,:bhg,:bhs,:bvg,:bvs] and (value.is_a?(Integer) or value.is_a?(Float))
98
+ @max_data = value
99
+ else
100
+ raise "Invalid max value for this chart type"
101
+ end
102
+ end
103
+
81
104
  # Adds a background or chart fill. Call this option twice if you want both a background and a chart fill
82
105
  # [+bg_or_c+] Can be one of <tt>:background</tt> or <tt>:chart</tt> depending on the kind of fill requested
83
106
  # [+type+] Can be one of <tt>:solid</tt>, <tt>:gradient</tt> or <tt>:stripes</tt>
@@ -331,14 +354,18 @@ module GoogleChart
331
354
  encoded_data.join((self.data_encoding == :simple) ? "," : "|")
332
355
  end
333
356
 
357
+ def max_data_value
358
+ @max_data or @data.flatten.max
359
+ end
360
+
334
361
  ## Applicable to Line Charts and Scatter Charts only
335
362
 
336
363
  def max_x_value
337
- x_data.flatten.max
364
+ @max_x or x_data.flatten.max
338
365
  end
339
366
 
340
367
  def max_y_value
341
- y_data.flatten.max
368
+ @max_y or y_data.flatten.max
342
369
  end
343
370
 
344
371
  def x_data
@@ -51,14 +51,13 @@ module GoogleChart
51
51
  encoded_data << join_encoded_data([encode_data(x_data[i],max_x_value), encode_data(y_data[i],max_y_value)])
52
52
  }
53
53
  join_encoded_data(encoded_data)
54
- else # Line graph multiple data series
55
- max_value = @data.flatten.max
54
+ else # Line graph multiple data series
56
55
  join_encoded_data(@data.collect { |series|
57
- encode_data(series, max_value)
56
+ encode_data(series, max_data_value)
58
57
  })
59
58
  end
60
59
  else
61
- encode_data(@data.flatten)
60
+ encode_data(@data.flatten, max_data_value)
62
61
  end
63
62
  end
64
63
  end
@@ -22,7 +22,7 @@ module GoogleChart
22
22
  end
23
23
 
24
24
  def process_data
25
- encode_data(@data)
25
+ encode_data(@data, max_data_value)
26
26
  end
27
27
  end
28
28
  end
@@ -10,7 +10,7 @@ module GoogleChart
10
10
  # puts sc.to_url
11
11
  class ScatterChart < Base
12
12
 
13
- # Initializes the Venn Diagram with a +chart_size+ (in WIDTHxHEIGHT format) and a +chart_title+
13
+ # Initializes the Scatter Chart with a +chart_size+ (in WIDTHxHEIGHT format) and a +chart_title+
14
14
  def initialize(chart_size='300x200', chart_title=nil)
15
15
  super(chart_size, chart_title)
16
16
  self.chart_type = :s
data/lib/test.rb CHANGED
@@ -6,7 +6,7 @@ pc.data "Apples", 40
6
6
  pc.data "Banana", 20
7
7
  pc.data "Peach", 30
8
8
  pc.data "Orange", 60
9
- puts "Pie Chart"
9
+ puts "\nPie Chart"
10
10
  puts pc.to_url
11
11
 
12
12
  # Line Chart
@@ -19,7 +19,7 @@ lc.data "Trend 3", [6,5,4,3,2,1], 'ff0000'
19
19
  lc.axis :y, :range => [0,6], :color => 'ff00ff', :font_size => 16, :alignment => :center
20
20
  lc.axis :x, :range => [0,6], :color => '00ffff', :font_size => 16, :alignment => :center
21
21
  lc.grid :x_step => 100.0/6.0, :y_step => 100.0/6.0, :length_segment => 1, :length_blank => 0
22
- puts "Line Chart"
22
+ puts "\nLine Chart"
23
23
  puts lc.to_url
24
24
 
25
25
  # Bar Chart
@@ -27,14 +27,14 @@ bc = GoogleChart::BarChart.new('800x200', "Bar Chart", :vertical, false)
27
27
  bc.data "Trend 1", [5,4,3,1,3,5], '0000ff'
28
28
  bc.data "Trend 2", [1,2,3,4,5,6], 'ff0000'
29
29
  bc.data "Trend 3", [6,5,4,4,5,6], '00ff00'
30
- puts "Bar Chart"
30
+ puts "\nBar Chart"
31
31
  puts bc.to_url
32
32
 
33
33
  # Line XY Chart
34
34
  lcxy = GoogleChart::LineChart.new('320x200', "Line XY Chart", true)
35
35
  lcxy.data "Trend 1", [[1,1], [2,2], [3,3], [4,4]], '0000ff'
36
36
  lcxy.data "Trend 2", [[4,5], [2,2], [1,1], [3,4]], '00ff00'
37
- puts "Line XY Chart"
37
+ puts "\nLine XY Chart"
38
38
  puts lcxy.to_url
39
39
 
40
40
  # Venn Diagram
@@ -49,32 +49,36 @@ vd.data "Blue", 100, '0000ff'
49
49
  vd.data "Green", 80, '00ff00'
50
50
  vd.data "Red", 60, 'ff0000'
51
51
  vd.intersections 30,30,30,10
52
- puts "Venn Diagram"
52
+ puts "\nVenn Diagram"
53
53
  puts vd.to_url
54
54
 
55
55
  # Scatter Chart
56
56
  sc = GoogleChart::ScatterChart.new('320x200',"Scatter Chart")
57
57
  sc.data "Scatter Set", [[1,1,], [2,2], [3,3], [4,4]]
58
- sc.axis :x, :range => [0,4]
59
- sc.axis :y, :range => [0,4]
58
+ sc.max_value [5,5] # Setting the max value
59
+ sc.axis :x, :range => [0,5]
60
+ sc.axis :y, :range => [0,5], :labels => [0,1,2,3,4,5]
60
61
  sc.point_sizes [10,15,30,55] # Optional
61
- puts "Scatter Chart"
62
+ puts "\nScatter Chart"
62
63
  puts sc.to_url
63
64
 
64
65
  # Solid fill
65
66
  lc.fill(:background, :solid, {:color => 'fff2cc'})
66
67
  lc.fill(:chart, :solid, {:color => 'ffcccc'})
68
+ puts "\nLine Chart with Solid Fill"
67
69
  puts lc.to_url
68
70
 
69
71
  # Gradient fill
70
72
  lc.fill :background, :gradient, :angle => 0, :color => [['76A4FB',1],['ffffff',0]]
71
73
  lc.fill :chart, :gradient, :angle => 0, :color => [['76A4FB',1],
72
74
  ['ffffff',0]]
75
+ puts "\nLine Chart with Gradient Fill"
73
76
  puts lc.to_url
74
77
 
75
78
  # Stripes Fill
76
79
  lc.fill :chart, :stripes, :angle => 90, :color => [['76A4FB',0.2],
77
80
  ['ffffff',0.2]]
81
+ puts "\nLine Chart with Stripes Fill"
78
82
  puts lc.to_url
79
83
 
80
84
  # Adding Extra params
@@ -82,7 +86,9 @@ lc = GoogleChart::LineChart.new('320x200', "Line Chart", false)
82
86
  lc.data "Trend 1", [5,4,3,1,3,5,6], '0000ff'
83
87
  lc.data "Trend 2", [1,2,3,4,5,6], '00ff00'
84
88
  lc.data "Trend 3", [6,5,4,3,2,1], 'ff0000'
85
- puts lc.to_url({:chm => "r,000000,0,0.1,0.5"}) # Single black line as a horizontal marker
89
+ lc.max_value 10 # Setting max value for simple line chart
90
+ puts "\nLine Chart with Horizontal range marker using extra params"
91
+ puts lc.to_url({:chm => "r,000000,0,0.1,0.5"}) # Single black region as a horizontal range marker
86
92
 
87
93
  # Bryan Error condition
88
94
  lcxy = GoogleChart::LineChart.new('320x200', "Line XY Chart", true)
@@ -90,5 +96,6 @@ lcxy.data 'A', [[0, 32], [1, 15], [2, 23], [3, 18], [4, 41], [5, 53]],'0000ff'
90
96
  lcxy.data 'B', [[0, 73], [1, 0], [2, 28], [3, 0], [4, 333], [5, 0]], '00ff00'
91
97
  lcxy.data 'C', [[0, 22], [1, 26], [2, 14], [3, 33], [4, 17], [5, 7]], 'ff0000'
92
98
  lcxy.data 'D', [[0, 4], [1, 39], [2, 0], [3, 5], [4, 11], [5, 14]], 'cc00ff'
99
+ puts "\nBryan Error Condition"
93
100
  puts lcxy.to_url
94
101
 
metadata CHANGED
@@ -3,7 +3,7 @@ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: gchartrb
5
5
  version: !ruby/object:Gem::Version
6
- version: "0.5"
6
+ version: 0.5.1
7
7
  date: 2007-12-12 00:00:00 +08:00
8
8
  summary: Ruby Wrapper for the Google Chart API
9
9
  require_paths:
@@ -35,6 +35,7 @@ files:
35
35
  - README.txt
36
36
  - Rakefile
37
37
  - TODO
38
+ - lib/example.rb
38
39
  - lib/google_chart.rb
39
40
  - lib/google_chart/bar_chart.rb
40
41
  - lib/google_chart/base.rb