rubyvis 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +1 -3
- data/History.txt +9 -1
- data/Manifest.txt +5 -0
- data/README.txt +34 -6
- data/examples/antibiotics/antibiotics.rb +11 -11
- data/examples/barley/barley.rb +5 -5
- data/examples/grouped_charts.rb +67 -0
- data/examples/line_and_step.rb +61 -0
- data/examples/stacked_charts.rb +50 -0
- data/examples/third.rb +10 -6
- data/lib/rubyvis.rb +3 -1
- data/lib/rubyvis/layout.rb +25 -0
- data/lib/rubyvis/layout/stack.rb +228 -0
- data/lib/rubyvis/mark.rb +34 -33
- data/lib/rubyvis/mark/area.rb +3 -2
- data/lib/rubyvis/mark/bar.rb +4 -1
- data/lib/rubyvis/mark/dot.rb +18 -18
- data/lib/rubyvis/mark/label.rb +1 -1
- data/lib/rubyvis/mark/line.rb +2 -1
- data/lib/rubyvis/mark/panel.rb +5 -5
- data/lib/rubyvis/mark/wedge.rb +2 -1
- data/lib/rubyvis/nest.rb +5 -6
- data/lib/rubyvis/scale/log.rb +15 -9
- data/lib/rubyvis/scene/svg_area.rb +8 -8
- data/lib/rubyvis/scene/svg_line.rb +4 -4
- data/lib/rubyvis/sceneelement.rb +1 -1
- data/spec/scale_log_spec.rb +105 -0
- data/spec/spec.opts +2 -1
- metadata +9 -3
- metadata.gz.sig +0 -0
data/lib/rubyvis/mark/label.rb
CHANGED
@@ -10,7 +10,7 @@ module Rubyvis
|
|
10
10
|
'label'
|
11
11
|
end
|
12
12
|
def self.defaults
|
13
|
-
Label.new.extend(Mark.defaults).events('none').text(lambda{|x| x}).font("10px sans-serif").text_angle(0).text_style(
|
13
|
+
Label.new.extend(Mark.defaults).events('none').text(lambda{|x| x}).font("10px sans-serif" ).text_angle( 0 ).text_style( 'black' ).text_align( 'left' ).text_baseline( 'bottom' ).text_margin(3)
|
14
14
|
end
|
15
15
|
end
|
16
16
|
end
|
data/lib/rubyvis/mark/line.rb
CHANGED
@@ -31,7 +31,8 @@ module Rubyvis
|
|
31
31
|
area_build_instance(*args)
|
32
32
|
end
|
33
33
|
def self.defaults
|
34
|
-
|
34
|
+
a=Rubyvis::Colors.category10()
|
35
|
+
Line.new.extend(Mark.defaults).line_join('miter').line_width(1.5).stroke_style( lambda {return a.scale(self.parent.index)}).interpolate('linear').eccentricity(0).tension(7)
|
35
36
|
end
|
36
37
|
end
|
37
38
|
end
|
data/lib/rubyvis/mark/panel.rb
CHANGED
@@ -50,7 +50,7 @@ module Rubyvis
|
|
50
50
|
super(s)
|
51
51
|
return if !s.visible
|
52
52
|
s.children=[] if !s.children
|
53
|
-
scale=self.scale*s.transform.k
|
53
|
+
scale=self.scale * s.transform.k
|
54
54
|
n=self.children.size
|
55
55
|
Mark.index=-1
|
56
56
|
n.times {|i|
|
@@ -77,12 +77,14 @@ module Rubyvis
|
|
77
77
|
}.join
|
78
78
|
end
|
79
79
|
def build_implied(s)
|
80
|
+
panel_build_implied(s)
|
81
|
+
end
|
82
|
+
def panel_build_implied(s)
|
80
83
|
if(!self.parent)
|
81
84
|
c=s.canvas
|
82
85
|
if(c)
|
83
86
|
if(c._panel!=self)
|
84
87
|
c._panel=self
|
85
|
-
p "hola"
|
86
88
|
c.delete_if? {true}
|
87
89
|
end
|
88
90
|
if s.width.nil?
|
@@ -103,10 +105,8 @@ module Rubyvis
|
|
103
105
|
end
|
104
106
|
s.canvas=c
|
105
107
|
end
|
106
|
-
|
107
108
|
s.transform=Rubyvis.Transform.identity if (s.transform.nil?)
|
108
|
-
|
109
|
-
|
109
|
+
mark_build_implied(s)
|
110
110
|
end
|
111
111
|
|
112
112
|
end
|
data/lib/rubyvis/mark/wedge.rb
CHANGED
@@ -9,7 +9,8 @@ module Rubyvis
|
|
9
9
|
@properties=Mark.properties.dup
|
10
10
|
attr_accessor_dsl :start_angle, :end_angle, :angle, :inner_radius, :outer_radius, :line_width, [:stroke_style, lambda {|d| pv.color(d)}], [:fill_style, lambda {|d| pv.color(d)}]
|
11
11
|
def self.defaults
|
12
|
-
|
12
|
+
a=Rubyvis.Colors.category20()
|
13
|
+
Wedge.new.extend(Mark.defaults).start_angle(lambda {s=self.sibling; s ? s.end_angle: -Math::PI.quo(2) } ).inner_radius( 0 ).line_width( 1.5 ).stroke_style( nil ).fill_style( lambda {a.scale(self.index)})
|
13
14
|
end
|
14
15
|
def mid_radius
|
15
16
|
(inner_radius+outer_radius) / 2.0
|
data/lib/rubyvis/nest.rb
CHANGED
@@ -83,7 +83,7 @@ module Rubyvis
|
|
83
83
|
return self
|
84
84
|
end
|
85
85
|
def sort_keys(order=nil)
|
86
|
-
|
86
|
+
keys[keys.size-1].order = order.nil? ? pv.natural_order : order
|
87
87
|
return self
|
88
88
|
end
|
89
89
|
def sort_values(order=nil)
|
@@ -91,7 +91,7 @@ module Rubyvis
|
|
91
91
|
return self
|
92
92
|
end
|
93
93
|
def map
|
94
|
-
i=0
|
94
|
+
#i=0
|
95
95
|
map={}
|
96
96
|
values=[]
|
97
97
|
@array.each_with_index {|x,j|
|
@@ -111,7 +111,7 @@ module Rubyvis
|
|
111
111
|
}
|
112
112
|
if(self.order)
|
113
113
|
values.each_with_index {|v,vi|
|
114
|
-
values[vi].sort(&self.order)
|
114
|
+
values[vi].sort!(&self.order)
|
115
115
|
}
|
116
116
|
end
|
117
117
|
map
|
@@ -129,16 +129,15 @@ module Rubyvis
|
|
129
129
|
def entries_sort(array,i)
|
130
130
|
o=keys[i].order
|
131
131
|
if o
|
132
|
-
array.sort {|a,b| o(a.key, b.key)}
|
132
|
+
array.sort! {|a,b| o.call(a.key, b.key)}
|
133
133
|
end
|
134
134
|
i+=1
|
135
135
|
if (i<keys.size)
|
136
136
|
array.each {|v|
|
137
137
|
entries_sort(v, i)
|
138
138
|
}
|
139
|
-
|
140
139
|
end
|
141
|
-
|
140
|
+
array
|
142
141
|
|
143
142
|
end
|
144
143
|
def rollup_rollup(map,f)
|
data/lib/rubyvis/scale/log.rb
CHANGED
@@ -9,8 +9,7 @@ module Rubyvis
|
|
9
9
|
base(10)
|
10
10
|
end
|
11
11
|
def log(x)
|
12
|
-
|
13
|
-
Math.log(x+1e15) / @_p
|
12
|
+
Math.log(x) / @_p.to_f
|
14
13
|
end
|
15
14
|
def pow(y)
|
16
15
|
@b**y
|
@@ -24,32 +23,39 @@ module Rubyvis
|
|
24
23
|
end
|
25
24
|
return @b
|
26
25
|
end
|
26
|
+
def nice
|
27
|
+
d=domain
|
28
|
+
domain(pv.log_floor(d[0],@b), pv.log_ceil(d[1],@b))
|
29
|
+
end
|
27
30
|
def ticks
|
28
31
|
d = domain
|
29
|
-
n = d[0] < 0
|
32
|
+
n = d[0] < 0
|
33
|
+
|
34
|
+
# puts "dom: #{d[0]} -> #{n}"
|
35
|
+
|
30
36
|
i = (n ? -log(-d[0]) : log(d[0])).floor
|
31
37
|
j = (n ? -log(-d[1]) : log(d[1])).ceil
|
32
38
|
ticks = [];
|
33
|
-
if n
|
39
|
+
if n
|
34
40
|
ticks.push(-pow(-i))
|
35
41
|
(i..j).each {|ii|
|
36
|
-
((b-1)...0).each {|k|
|
42
|
+
((@b-1)...0).each {|k|
|
37
43
|
ticks.push(-pow(-ii) * k)
|
38
44
|
}
|
39
45
|
}
|
40
46
|
else
|
41
47
|
(i...j).each {|ii|
|
42
|
-
(1
|
43
|
-
ticks.push(pow(
|
48
|
+
(1...@b).each {|k|
|
49
|
+
ticks.push(pow(ii) * k)
|
44
50
|
}
|
45
51
|
}
|
46
|
-
ticks.push(pow(
|
52
|
+
ticks.push(pow(j));
|
47
53
|
end
|
48
54
|
|
49
55
|
#for (i = 0; ticks[i] < d[0]; i++); // strip small values
|
50
56
|
#for (j = ticks.length; ticks[j - 1] > d[1]; j--); // strip big values
|
51
57
|
#return ticks.slice(i, j);
|
52
|
-
ticks
|
58
|
+
ticks.find_all {|v| v>=d[0] and v<=d[1]}
|
53
59
|
end
|
54
60
|
end
|
55
61
|
end
|
@@ -15,11 +15,11 @@ module Rubyvis
|
|
15
15
|
|
16
16
|
return e if (fill.opacity==0 and stroke.opacity==0)
|
17
17
|
# /** @private Computes the straight path for the range [i, j]. */
|
18
|
-
path=lambda {|
|
18
|
+
path=lambda {|ii,j|
|
19
19
|
p1 = []
|
20
20
|
p2 = [];
|
21
21
|
k=j
|
22
|
-
(
|
22
|
+
(ii..k).each {|i|
|
23
23
|
si = scenes[i]
|
24
24
|
sj = scenes[j]
|
25
25
|
pi = "#{si.left},#{si.top}"
|
@@ -48,7 +48,7 @@ module Rubyvis
|
|
48
48
|
}
|
49
49
|
|
50
50
|
# @private Computes the curved path for the range [i, j]. */
|
51
|
-
path_curve=lambda {|
|
51
|
+
path_curve=lambda {|ii, j|
|
52
52
|
pointsT = []
|
53
53
|
pointsB = []
|
54
54
|
pathT=nil
|
@@ -56,7 +56,7 @@ module Rubyvis
|
|
56
56
|
|
57
57
|
|
58
58
|
k=j
|
59
|
-
(
|
59
|
+
(ii..k).each {|i|
|
60
60
|
sj = scenes[j];
|
61
61
|
pointsT.push(scenes[i])
|
62
62
|
pointsB.push(OpenStruct.new({:left=> sj.left + sj.width, :top=> sj.top + sj.height}))
|
@@ -112,9 +112,9 @@ module Rubyvis
|
|
112
112
|
"stroke-width"=> stroke.opacity!=0 ? s.line_width / self.scale : nil
|
113
113
|
});
|
114
114
|
return self.append(e, scenes, 0);
|
115
|
-
|
115
|
+
end
|
116
116
|
|
117
|
-
|
117
|
+
def self.area_segment(scenes)
|
118
118
|
|
119
119
|
e = scenes._g.elements[1]
|
120
120
|
s = scenes[0]
|
@@ -191,7 +191,7 @@ module Rubyvis
|
|
191
191
|
e = self.append(e, scenes, i);
|
192
192
|
}
|
193
193
|
return e;
|
194
|
-
|
195
|
-
|
194
|
+
end
|
195
|
+
end
|
196
196
|
end
|
197
197
|
|
@@ -118,14 +118,14 @@ module Rubyvis
|
|
118
118
|
e = 1 - s1.eccentricity
|
119
119
|
r = Math.sqrt(dx * dx + dy * dy) / (2 * e)
|
120
120
|
if !((e<=0) and (e>1))
|
121
|
-
return "A
|
121
|
+
return "A#{r},#{r} 0 0,#{l} #{s2.left},#{s2.top}"
|
122
122
|
end
|
123
123
|
when "step-before"
|
124
|
-
return "V
|
124
|
+
return "V#{s2.top}H#{s2.left}"
|
125
125
|
when "step-after"
|
126
|
-
return "H
|
126
|
+
return "H#{s2.left}V#{s2.top}"
|
127
127
|
end
|
128
|
-
return "L
|
128
|
+
return "L#{s2.left},#{s2.top}"
|
129
129
|
end
|
130
130
|
|
131
131
|
#/** @private Line-line intersection, per Akenine-Moller 16.16.1. */
|
data/lib/rubyvis/sceneelement.rb
CHANGED
@@ -5,7 +5,7 @@ module Rubyvis
|
|
5
5
|
end
|
6
6
|
include Enumerable
|
7
7
|
attr_accessor :visible
|
8
|
-
attr_accessor :mark, :type, :child_index, :parent, :parent_index, :target, :defs, :data, :antialias, :line_width, :fill_style, :overflow, :width, :height, :top, :bottom, :left, :right, :title, :reverse, :stroke_style, :transform, :canvas, :_g, :events, :cursor, :children, :id, :segmented, :interpolate, :tension, :name, :text_baseline, :text_align, :text, :font, :text_angle, :text_style, :text_margin, :text_decoration, :text_shadow, :line_join, :eccentricity, :shape_size, :shape, :shape_angle, :shape_radius, :start_angle, :end_angle, :angle, :inner_radius, :outer_radius
|
8
|
+
attr_accessor :mark, :type, :child_index, :parent, :parent_index, :target, :defs, :data, :antialias, :line_width, :fill_style, :overflow, :width, :height, :top, :bottom, :left, :right, :title, :reverse, :stroke_style, :transform, :canvas, :_g, :events, :cursor, :children, :id, :segmented, :interpolate, :tension, :name, :text_baseline, :text_align, :text, :font, :text_angle, :text_style, :text_margin, :text_decoration, :text_shadow, :line_join, :eccentricity, :shape_size, :shape, :shape_angle, :shape_radius, :start_angle, :end_angle, :angle, :inner_radius, :outer_radius, :layers, :orient, :offset, :order
|
9
9
|
|
10
10
|
def []=(v,i)
|
11
11
|
if v.is_a? Numeric
|
@@ -0,0 +1,105 @@
|
|
1
|
+
require File.dirname(__FILE__)+"/spec_helper.rb"
|
2
|
+
describe Rubyvis::Scale::Log do
|
3
|
+
if Rubyvis::JohnsonLoader.available?
|
4
|
+
context "direct protovis API comparison" do
|
5
|
+
before(:all) do
|
6
|
+
@rt= Rubyvis::JohnsonLoader.new("/data/LogScale.js").runtime
|
7
|
+
end
|
8
|
+
before do
|
9
|
+
@h=280
|
10
|
+
@h_dom=1000
|
11
|
+
@y = Rubyvis.Scale.log(1, @h_dom).range(1,@h)
|
12
|
+
@rt[:h_dom] = @h_dom
|
13
|
+
@rt[:h] = @h
|
14
|
+
@y_js=@rt.evaluate("y=pv.Scale.log(1, h_dom).range(1,h)")
|
15
|
+
@v1,@v2,@v3=rand()+1,rand()+3,rand()+5
|
16
|
+
@rt[:v1]=@v1
|
17
|
+
@rt[:v2]=@v2
|
18
|
+
@rt[:v3]=@v3
|
19
|
+
|
20
|
+
end
|
21
|
+
it "domain() implemented equally" do
|
22
|
+
@y.domain(@v1)
|
23
|
+
@rt.evaluate("y.domain(v1)")
|
24
|
+
@y.domain.should==@rt.evaluate("y.domain()").to_a
|
25
|
+
@y.domain(@v1,@v2,@v3)
|
26
|
+
@rt.evaluate("y.domain(v1,v2,v3)")
|
27
|
+
@y.domain.should==@rt.evaluate("y.domain()").to_a
|
28
|
+
end
|
29
|
+
it "scale() implemented equally for complex domain" do
|
30
|
+
@y.domain(@v1,@v2,@v3)
|
31
|
+
@rt.evaluate("y.domain(v1,v2,v3)")
|
32
|
+
@y.scale(@v1+1).should==@rt.evaluate("y(v1+1)")
|
33
|
+
@y.scale(@v2+1).should==@rt.evaluate("y(v2+1)")
|
34
|
+
@y.scale(@v3+1).should==@rt.evaluate("y(v3+1)")
|
35
|
+
end
|
36
|
+
it "invert() implemented equally" do
|
37
|
+
@y.domain(@v1,@v2,@v3)
|
38
|
+
@rt.evaluate("y.domain(v1,v2,v3)")
|
39
|
+
@y.invert(@v1+1).should==@rt.evaluate("y.invert(v1+1)")
|
40
|
+
@y.invert(@v2+1).should==@rt.evaluate("y.invert(v2+1)")
|
41
|
+
@y.invert(@v3+1).should==@rt.evaluate("y.invert(v3+1)")
|
42
|
+
end
|
43
|
+
it "ticks() implemented equally for numbers" do
|
44
|
+
@y.ticks.should==@rt.evaluate("y.ticks()").to_a
|
45
|
+
|
46
|
+
end
|
47
|
+
it "nice() implemented equally" do
|
48
|
+
@y.domain(@v1,@v2)
|
49
|
+
@rt.evaluate("y.domain(v1,v2)")
|
50
|
+
@y.nice
|
51
|
+
@rt.evaluate("y.nice()")
|
52
|
+
@y.domain.should==@rt.evaluate("y.domain()").to_a
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
it "should be created as Javascript" do
|
59
|
+
h=280
|
60
|
+
y = Rubyvis.Scale.log(1, 1500)
|
61
|
+
end
|
62
|
+
|
63
|
+
before do
|
64
|
+
@h=280
|
65
|
+
@h_dom=1000
|
66
|
+
@y = Rubyvis.Scale.log(1, @h_dom).range(1,@h)
|
67
|
+
end
|
68
|
+
it "y should be a Scale" do
|
69
|
+
@y.should be_a(Rubyvis::Scale::Log)
|
70
|
+
end
|
71
|
+
it "should respond to domain" do
|
72
|
+
@y.domain.should==[1, 1000]
|
73
|
+
@y.domain(1)
|
74
|
+
@y.domain.should==[1,1]
|
75
|
+
@y.domain(1,100,300)
|
76
|
+
@y.domain.should==[1,100,300]
|
77
|
+
end
|
78
|
+
it "should respond to range" do
|
79
|
+
@y.range.should==[1, 280]
|
80
|
+
@y.range(1)
|
81
|
+
@y.range.should==[1,1]
|
82
|
+
@y.range(1,100,300)
|
83
|
+
@y.range.should==[1,100,300]
|
84
|
+
end
|
85
|
+
it "should returns correct scale" do
|
86
|
+
@y.scale(@h_dom).should==280
|
87
|
+
@y[@h_dom].should==280
|
88
|
+
val=20
|
89
|
+
@y.scale(val).should be_close(121.995, 0.001)
|
90
|
+
end
|
91
|
+
it "should returns correct invert" do
|
92
|
+
@y.invert(100).should be_close(11.601, 0.001)
|
93
|
+
@y.invert(200).should be_close(137.970, 0.001)
|
94
|
+
end
|
95
|
+
it "should returns correct ticks" do
|
96
|
+
t=1,2,3,4,5,6,7,8,9,10,20,30,40,50,60,70,80,90,100,200,300,400,500,600,700,800,900,1000
|
97
|
+
@y.ticks.should==t
|
98
|
+
|
99
|
+
end
|
100
|
+
it "should nice nicely" do
|
101
|
+
@y.domain([0.20147987687960267, 0.996679553296417])
|
102
|
+
@y.nice
|
103
|
+
@y.domain().should==[0.1,1]
|
104
|
+
end
|
105
|
+
end
|
data/spec/spec.opts
CHANGED
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 4
|
9
|
+
version: 0.1.4
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Claudio Bustos
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
35
35
|
rpP0jjs0
|
36
36
|
-----END CERTIFICATE-----
|
37
37
|
|
38
|
-
date: 2010-10-
|
38
|
+
date: 2010-10-20 00:00:00 -03:00
|
39
39
|
default_executable:
|
40
40
|
dependencies:
|
41
41
|
- !ruby/object:Gem::Dependency
|
@@ -93,10 +93,13 @@ files:
|
|
93
93
|
- examples/crimea/crimea_line.rb
|
94
94
|
- examples/dot.rb
|
95
95
|
- examples/first.rb
|
96
|
+
- examples/grouped_charts.rb
|
96
97
|
- examples/line.rb
|
98
|
+
- examples/line_and_step.rb
|
97
99
|
- examples/pie_and_donut.rb
|
98
100
|
- examples/scatterplot.rb
|
99
101
|
- examples/second.rb
|
102
|
+
- examples/stacked_charts.rb
|
100
103
|
- examples/third.rb
|
101
104
|
- lib/rubyvis.rb
|
102
105
|
- lib/rubyvis/color/color.rb
|
@@ -108,6 +111,8 @@ files:
|
|
108
111
|
- lib/rubyvis/internals.rb
|
109
112
|
- lib/rubyvis/javascript_behaviour.rb
|
110
113
|
- lib/rubyvis/label.rb
|
114
|
+
- lib/rubyvis/layout.rb
|
115
|
+
- lib/rubyvis/layout/stack.rb
|
111
116
|
- lib/rubyvis/mark.rb
|
112
117
|
- lib/rubyvis/mark/anchor.rb
|
113
118
|
- lib/rubyvis/mark/area.rb
|
@@ -282,6 +287,7 @@ test_files:
|
|
282
287
|
- spec/scale_ordinal_spec.rb
|
283
288
|
- spec/internal_spec.rb
|
284
289
|
- spec/panel_spec.rb
|
290
|
+
- spec/scale_log_spec.rb
|
285
291
|
- spec/scale_linear_datetime_spec.rb
|
286
292
|
- spec/scale_spec.rb
|
287
293
|
- spec/scale_linear_spec.rb
|
metadata.gz.sig
CHANGED
Binary file
|