svg-graph 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|