statsample 0.15.1 → 0.16.0

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.
@@ -1,118 +0,0 @@
1
- require 'tempfile'
2
- module Statsample
3
- module Graph
4
- class SvgScatterplot < SVG::Graph::Plot # :nodoc:
5
- attr_accessor :draw_path
6
- def initialize(ds,config={})
7
- super(config)
8
- @ds=ds
9
- set_x(@ds.fields[0])
10
- end
11
- def report_building_html(g)
12
- self.parse()
13
- tf=Tempfile.new(['image','.svg'])
14
- tf.write self.burn
15
- tf.close
16
- image=ReportBuilder::Image.new(tf.path)
17
- g.parse_element(image)
18
- end
19
- def set_defaults
20
- super
21
- init_with(
22
- :show_data_values => false,
23
- :draw_path => false
24
- )
25
- end
26
- def set_x(x)
27
- @x=x
28
- @y=@ds.fields - [x]
29
- end
30
- def parse
31
- data=@y.inject({}){|a,v| a[v]=[];a}
32
- @ds.each{|row|
33
- @y.each{|y|
34
- data[y]+=[row[@x],row[y]] unless row[@x].nil? or row[y].nil?
35
- }
36
- }
37
- data.each{|y,d|
38
- add_data({
39
- :data=>d, :title=>@ds[y].name
40
- })
41
- }
42
- end
43
- def get_x_labels
44
- values=super
45
- values.collect{|x|
46
- if x.is_a? Integer
47
- x
48
- else
49
- sprintf("%0.2f",x).to_f
50
- end
51
- }
52
- end
53
- def get_y_labels
54
- values=super
55
- values.collect{|x|
56
- if x.is_a? Integer
57
- x
58
- else
59
- sprintf("%0.2f",x).to_f
60
- end
61
- }
62
- end
63
- def draw_data
64
- line = 1
65
-
66
- x_min, x_max, x_div = x_range
67
- y_min, y_max, y_div = y_range
68
- x_step = (@graph_width.to_f - font_size*2) / (x_max-x_min)
69
- y_step = (@graph_height.to_f - font_size*2) / (y_max-y_min)
70
-
71
- for data in @data
72
- x_points = data[:data][X]
73
- y_points = data[:data][Y]
74
-
75
- lpath = "L"
76
- x_start = 0
77
- y_start = 0
78
- x_points.each_index { |idx|
79
- x = (x_points[idx] - x_min) * x_step
80
- y = @graph_height - (y_points[idx] - y_min) * y_step
81
- x_start, y_start = x,y if idx == 0
82
- lpath << "#{x} #{y} "
83
- }
84
-
85
- if area_fill
86
- @graph.add_element( "path", {
87
- "d" => "M#{x_start} #@graph_height #{lpath} V#@graph_height Z",
88
- "class" => "fill#{line}"
89
- })
90
- end
91
- if draw_path
92
- @graph.add_element( "path", {
93
- "d" => "M#{x_start} #{y_start} #{lpath}",
94
- "class" => "line#{line}"
95
- })
96
- end
97
- if show_data_points || show_data_values
98
- x_points.each_index { |idx|
99
- x = (x_points[idx] - x_min) * x_step
100
- y = @graph_height - (y_points[idx] - y_min) * y_step
101
- if show_data_points
102
- @graph.add_element( "circle", {
103
- "cx" => x.to_s,
104
- "cy" => y.to_s,
105
- "r" => "2.5",
106
- "class" => "dataPoint#{line}"
107
- })
108
- add_popup(x, y, format( x_points[idx], y_points[idx] )) if add_popups
109
- end
110
- make_datapoint_text( x, y-6, y_points[idx] ) if show_data_values
111
- }
112
- end
113
- line += 1
114
- end
115
- end
116
- end
117
- end
118
- end
@@ -1,54 +0,0 @@
1
- require(File.dirname(__FILE__)+'/helpers_tests.rb')
2
- require('statsample/graph')
3
- class StatsampleSvgGraphTestCase < MiniTest::Unit::TestCase
4
-
5
- def setup
6
- @image_path=Dir::tmpdir+"/images"
7
- FileUtils.mkdir(@image_path) if !File.exists? @image_path
8
- end
9
- def test_histogram
10
- if Statsample.has_gsl?
11
- ar=(1..1000).to_a.collect {|a|
12
- rand(10)
13
- }.to_vector(:scale)
14
- h=ar.histogram([0,2,5,11])
15
- file=Tempfile.new("svg_histogram_only.svg")
16
- graph = Statsample::Graph::SvgHistogram.new({})
17
- graph.histogram=h
18
- file.puts(graph.burn)
19
- else
20
- skip "Statsample::Graph::SvgHistogram.new not tested (no ruby-gsl)"
21
- end
22
- end
23
- def assert_svg(msg=nil)
24
- msg||="%s isn't a svg file"
25
- Tempfile.open("svg") do |fp|
26
- yield fp
27
- fp.close
28
- fp.open
29
- assert_match(/DOCTYPE svg/, fp.gets(nil), sprintf(msg,fp.path))
30
- end
31
- end
32
- def test_vector
33
- ar=[]
34
- (1..1000).each {|a|
35
- ar.push(rand(10))
36
- }
37
- vector=ar.to_vector
38
- assert_svg {|file| vector.svggraph_frequencies(file)}
39
- assert_svg {|file| vector.svggraph_frequencies(file, 800, 600, SVG::Graph::Bar, :graph_title=>'Bar') }
40
- assert_svg {|file| vector.svggraph_frequencies(file, 800, 600, SVG::Graph::BarHorizontalNoOp, :graph_title=>'Horizontal Bar') }
41
- assert_svg {|file| vector.svggraph_frequencies(file,800,600, SVG::Graph::PieNoOp, :graph_title=>'Pie') }
42
- vector.type=:scale
43
- if Statsample.has_gsl?
44
- file=Tempfile.new("svg_histogram.svg").path
45
- hist=vector.svggraph_histogram(5)
46
- File.open(file,"wb") {|fp|
47
- fp.write(hist.burn)
48
- }
49
- #assert(File.exists?(file))
50
- else
51
- skip "Statsample::Vector#svggraph_histogram.new not tested (no ruby-gsl)"
52
- end
53
- end
54
- end