svg-graph 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +4 -3
- data/README.txt +7 -1
- data/Rakefile +6 -6
- data/lib/SVG/Graph/BarBase.rb +23 -25
- data/lib/SVG/Graph/Graph.rb +4 -6
- data/lib/SVG/Graph/Line.rb +34 -34
- data/lib/svggraph.rb +1 -1
- data/test/test_svg_graph.rb +43 -43
- metadata +13 -8
data/History.txt
CHANGED
data/README.txt
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
= SVG::Graph
|
2
2
|
|
3
|
-
|
3
|
+
http://www.germane-software.com/software/SVG/SVG::Graph/
|
4
4
|
|
5
5
|
== Author
|
6
6
|
|
@@ -11,8 +11,14 @@ This software is available under the Ruby license[LICENSE.txt]
|
|
11
11
|
|
12
12
|
== DESCRIPTION:
|
13
13
|
|
14
|
+
Gem version of SVG:::Graph.
|
15
|
+
|
14
16
|
SVG:::Graph is a pure Ruby library for generating charts, which are a type of graph where the values of one axis are not scalar. SVG::Graph has a verry similar API to the Perl library SVG::TT::Graph, and the resulting charts also look the same. This isn't surprising, because SVG::Graph started as a loose port of SVG::TT::Graph, although the internal code no longer resembles the Perl original at all.
|
15
17
|
|
18
|
+
== FEATURES
|
19
|
+
|
20
|
+
* Tested for Ruby versions 1.8.6, 1.8.7 and 1.9.1
|
21
|
+
|
16
22
|
== LICENSE:
|
17
23
|
|
18
24
|
(The Ruby Licence)
|
data/Rakefile
CHANGED
@@ -4,12 +4,12 @@ require 'rubygems'
|
|
4
4
|
require 'hoe'
|
5
5
|
$:.unshift("./lib")
|
6
6
|
require 'svggraph'
|
7
|
-
Hoe.spec 'svg-graph' do
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
7
|
+
Hoe.spec 'svg-graph' do
|
8
|
+
self.version=SVG::Graph::VERSION
|
9
|
+
self.developer('Sean Russell', 'ser_AT_germane-software.com')
|
10
|
+
self.developer('Claudio Bustos', 'clbustos_AT_gmail.com')
|
11
|
+
self.rubyforge_name = 'ruby-statsample' # if different than 'svg_graph'
|
12
|
+
self.remote_rdoc_dir = 'svg-graph'
|
13
13
|
end
|
14
14
|
|
15
15
|
# vim: syntax=ruby
|
data/lib/SVG/Graph/BarBase.rb
CHANGED
@@ -17,34 +17,32 @@ module SVG
|
|
17
17
|
#
|
18
18
|
class BarBase < SVG::Graph::Graph
|
19
19
|
# Ensures that :fields are provided in the configuration.
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
# In addition to the defaults set in Graph::initialize, sets
|
28
|
-
# [bar_gap] true
|
29
|
-
# [stack] :overlap
|
30
|
-
def set_defaults
|
31
|
-
init_with( :bar_gap => true, :stack => :overlap )
|
32
|
-
end
|
33
|
-
|
34
|
-
# Whether to have a gap between the bars or not, default
|
35
|
-
# is true, set to false if you don't want gaps.
|
36
|
-
attr_accessor :bar_gap
|
37
|
-
# How to stack data sets. :overlap overlaps bars with
|
38
|
-
# transparent colors, :top stacks bars on top of one another,
|
39
|
-
# :side stacks the bars side-by-side. Defaults to :overlap.
|
40
|
-
attr_accessor :stack
|
41
|
-
|
20
|
+
def initialize config
|
21
|
+
raise "fields was not supplied or is empty" unless config[:fields] &&
|
22
|
+
config[:fields].kind_of?(Array) &&
|
23
|
+
config[:fields].length > 0
|
24
|
+
super
|
25
|
+
end
|
42
26
|
|
43
|
-
|
27
|
+
# In addition to the defaults set in Graph::initialize, sets
|
28
|
+
# [bar_gap] true
|
29
|
+
# [stack] :overlap
|
30
|
+
def set_defaults
|
31
|
+
init_with( :bar_gap => true, :stack => :overlap )
|
32
|
+
end
|
44
33
|
|
45
|
-
|
34
|
+
# Whether to have a gap between the bars or not, default
|
35
|
+
# is true, set to false if you don't want gaps.
|
36
|
+
attr_accessor :bar_gap
|
37
|
+
# How to stack data sets. :overlap overlaps bars with
|
38
|
+
# transparent colors, :top stacks bars on top of one another,
|
39
|
+
# :side stacks the bars side-by-side. Defaults to :overlap.
|
40
|
+
attr_accessor :stack
|
41
|
+
protected
|
42
|
+
|
43
|
+
def max_value
|
46
44
|
@data.collect{|x| x[:data].max}.max
|
47
|
-
|
45
|
+
end
|
48
46
|
|
49
47
|
def min_value
|
50
48
|
min = 0
|
data/lib/SVG/Graph/Graph.rb
CHANGED
@@ -99,7 +99,7 @@ module SVG
|
|
99
99
|
# [add_popups] false
|
100
100
|
def initialize( config )
|
101
101
|
@config = config
|
102
|
-
|
102
|
+
@data = nil
|
103
103
|
self.top_align = self.top_font = self.right_align = self.right_font = 0
|
104
104
|
|
105
105
|
init_with({
|
@@ -148,9 +148,7 @@ module SVG
|
|
148
148
|
:no_css =>false,
|
149
149
|
:add_popups =>false,
|
150
150
|
})
|
151
|
-
|
152
|
-
set_defaults if methods.include? "set_defaults"
|
153
|
-
|
151
|
+
set_defaults if self.respond_to? :set_defaults
|
154
152
|
init_with config
|
155
153
|
end
|
156
154
|
|
@@ -165,7 +163,7 @@ module SVG
|
|
165
163
|
# :title => 'Sales 2002'
|
166
164
|
# })
|
167
165
|
def add_data conf
|
168
|
-
|
166
|
+
@data = [] unless (defined? @data and !@data.nil?)
|
169
167
|
|
170
168
|
if conf[:data] and conf[:data].kind_of? Array
|
171
169
|
@data << conf
|
@@ -354,7 +352,7 @@ module SVG
|
|
354
352
|
# by subclasses.
|
355
353
|
def init_with config
|
356
354
|
config.each { |key, value|
|
357
|
-
|
355
|
+
self.send( key.to_s+"=", value ) if self.respond_to? key
|
358
356
|
}
|
359
357
|
end
|
360
358
|
|
data/lib/SVG/Graph/Line.rb
CHANGED
@@ -78,55 +78,55 @@ module SVG
|
|
78
78
|
# Fill in the area under the plot if true
|
79
79
|
attr_accessor :area_fill
|
80
80
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
81
|
+
# The constructor takes a hash reference, fields (the names for each
|
82
|
+
# field on the X axis) MUST be set, all other values are defaulted to
|
83
|
+
# those shown above - with the exception of style_sheet which defaults
|
84
|
+
# to using the internal style sheet.
|
85
|
+
def initialize config
|
86
|
+
raise "fields was not supplied or is empty" unless config[:fields] &&
|
87
|
+
config[:fields].kind_of?(Array) &&
|
88
|
+
config[:fields].length > 0
|
89
|
+
super
|
90
|
+
end
|
91
91
|
|
92
92
|
# In addition to the defaults set in Graph::initialize, sets
|
93
93
|
# [show_data_points] true
|
94
94
|
# [show_data_values] true
|
95
95
|
# [stacked] false
|
96
96
|
# [area_fill] false
|
97
|
-
|
97
|
+
def set_defaults
|
98
98
|
init_with(
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
99
|
+
:show_data_points => true,
|
100
|
+
:show_data_values => true,
|
101
|
+
:stacked => false,
|
102
|
+
:area_fill => false
|
103
103
|
)
|
104
|
-
|
104
|
+
|
105
105
|
self.top_align = self.top_font = self.right_align = self.right_font = 1
|
106
|
-
|
106
|
+
end
|
107
107
|
|
108
108
|
protected
|
109
109
|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
110
|
+
def max_value
|
111
|
+
max = 0
|
112
|
+
|
113
|
+
if (stacked == true) then
|
114
|
+
sums = Array.new(@config[:fields].length).fill(0)
|
115
|
+
|
116
|
+
@data.each do |data|
|
117
|
+
sums.each_index do |i|
|
118
|
+
sums[i] += data[:data][i].to_f
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
max = sums.max
|
123
|
+
else
|
124
|
+
max = @data.collect{|x| x[:data].max}.max
|
119
125
|
end
|
120
|
-
|
121
|
-
|
122
|
-
max = sums.max
|
123
|
-
else
|
124
|
-
max = @data.collect{|x| x[:data].max}.max
|
126
|
+
|
127
|
+
return max
|
125
128
|
end
|
126
129
|
|
127
|
-
return max
|
128
|
-
end
|
129
|
-
|
130
130
|
def min_value
|
131
131
|
min = 0
|
132
132
|
|
data/lib/svggraph.rb
CHANGED
data/test/test_svg_graph.rb
CHANGED
@@ -2,54 +2,54 @@ require "test/unit"
|
|
2
2
|
require "svggraph"
|
3
3
|
|
4
4
|
class TestSvgGraph < Test::Unit::TestCase
|
5
|
-
|
6
|
-
|
7
|
-
data_sales_02 = [12, 45, 21]
|
8
|
-
[SVG::Graph::Bar, SVG::Graph::BarHorizontal, SVG::Graph::Line, SVG::Graph::Pie].each do
|
9
|
-
|
10
|
-
graph = klass.new(
|
11
|
-
:height => 500,
|
12
|
-
:width => 300,
|
13
|
-
:fields => fields
|
14
|
-
)
|
15
|
-
graph.add_data(
|
16
|
-
:data => data_sales_02,
|
17
|
-
:title => 'Sales 2002'
|
18
|
-
)
|
19
|
-
out=graph.burn
|
20
|
-
assert(out=~/Created with SVG::Graph/)
|
21
|
-
end
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
5
|
+
def test_bar_line_and_pie
|
6
|
+
fields = %w(Jan Feb Mar);
|
7
|
+
data_sales_02 = [12, 45, 21]
|
8
|
+
[SVG::Graph::Bar, SVG::Graph::BarHorizontal, SVG::Graph::Line, SVG::Graph::Pie].each do
|
9
|
+
|klass|
|
10
|
+
graph = klass.new(
|
11
|
+
:height => 500,
|
12
|
+
:width => 300,
|
13
|
+
:fields => fields
|
14
|
+
)
|
15
|
+
graph.add_data(
|
16
|
+
:data => data_sales_02,
|
17
|
+
:title => 'Sales 2002'
|
18
|
+
)
|
19
|
+
out=graph.burn
|
20
|
+
assert(out=~/Created with SVG::Graph/)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
def test_plot
|
24
|
+
|
25
|
+
projection = [
|
26
26
|
6, 11, 0, 5, 18, 7, 1, 11, 13, 9, 1, 2, 19, 0, 3, 13,
|
27
27
|
7, 9
|
28
|
-
|
29
|
-
|
28
|
+
]
|
29
|
+
actual = [
|
30
30
|
0, 18, 8, 15, 9, 4, 18, 14, 10, 2, 11, 6, 14, 12,
|
31
31
|
15, 6, 4, 17, 2, 12
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
32
|
+
]
|
33
|
+
|
34
|
+
graph = SVG::Graph::Plot.new({
|
35
|
+
:height => 500,
|
36
|
+
:width => 300,
|
37
37
|
:key => true,
|
38
38
|
:scale_x_integers => true,
|
39
39
|
:scale_y_integerrs => true,
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
40
|
+
})
|
41
|
+
|
42
|
+
graph.add_data({
|
43
|
+
:data => projection,
|
44
|
+
:title => 'Projected',
|
45
|
+
})
|
46
|
+
|
47
|
+
graph.add_data({
|
48
|
+
:data => actual,
|
49
|
+
:title => 'Actual',
|
50
|
+
})
|
51
|
+
|
52
|
+
out=graph.burn()
|
53
|
+
assert(out=~/Created with SVG::Graph/)
|
54
|
+
end
|
55
55
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: svg-graph
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean Russell
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2009-
|
13
|
+
date: 2009-09-26 00:00:00 -04:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -21,9 +21,12 @@ dependencies:
|
|
21
21
|
requirements:
|
22
22
|
- - ">="
|
23
23
|
- !ruby/object:Gem::Version
|
24
|
-
version: 2.3.
|
24
|
+
version: 2.3.3
|
25
25
|
version:
|
26
|
-
description:
|
26
|
+
description: |-
|
27
|
+
Gem version of SVG:::Graph.
|
28
|
+
|
29
|
+
SVG:::Graph is a pure Ruby library for generating charts, which are a type of graph where the values of one axis are not scalar. SVG::Graph has a verry similar API to the Perl library SVG::TT::Graph, and the resulting charts also look the same. This isn't surprising, because SVG::Graph started as a loose port of SVG::TT::Graph, although the internal code no longer resembles the Perl original at all.
|
27
30
|
email:
|
28
31
|
- ser_AT_germane-software.com
|
29
32
|
- clbustos_AT_gmail.com
|
@@ -56,7 +59,9 @@ files:
|
|
56
59
|
- lib/SVG/Graph/TimeSeries.rb
|
57
60
|
- test/test_svg_graph.rb
|
58
61
|
has_rdoc: true
|
59
|
-
homepage:
|
62
|
+
homepage: http://www.germane-software.com/software/SVG/SVG::Graph/
|
63
|
+
licenses: []
|
64
|
+
|
60
65
|
post_install_message:
|
61
66
|
rdoc_options:
|
62
67
|
- --main
|
@@ -78,9 +83,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
78
83
|
requirements: []
|
79
84
|
|
80
85
|
rubyforge_project: ruby-statsample
|
81
|
-
rubygems_version: 1.3.
|
86
|
+
rubygems_version: 1.3.5
|
82
87
|
signing_key:
|
83
|
-
specification_version:
|
84
|
-
summary:
|
88
|
+
specification_version: 3
|
89
|
+
summary: Gem version of SVG:::Graph
|
85
90
|
test_files:
|
86
91
|
- test/test_svg_graph.rb
|