rubyvis 0.3.3 → 0.3.4
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.tar.gz.sig +0 -0
- data/History.txt +8 -0
- data/Manifest.txt +45 -36
- data/examples/{first_rbp_api.rb → 1_basic/1a_bar_rbp_api.rb} +1 -1
- data/examples/{first_protovis_api.rb → 1_basic/1b_bar_pv_api.rb} +1 -1
- data/examples/{second.rb → 1_basic/2_bar_and_rule.rb} +2 -2
- data/examples/{third.rb → 1_basic/3_grouped_bars.rb} +1 -1
- data/examples/{area_interpolation.rb → 1_basic/area_interpolation.rb} +1 -1
- data/examples/{dot.rb → 1_basic/dot.rb} +1 -1
- data/examples/{fixtures → 1_basic/fixtures}/tipsy.gif +0 -0
- data/examples/1_basic/grid.rb +29 -0
- data/examples/{image.rb → 1_basic/image.rb} +1 -1
- data/examples/{line.rb → 1_basic/line.rb} +1 -1
- data/examples/{line_interpolation.rb → 1_basic/line_interpolation.rb} +1 -1
- data/examples/2_medium/censo_agropecuario/censo_agropecuario_chile_data.rb +53 -0
- data/examples/2_medium/censo_agropecuario/census_treemap.rb +63 -0
- data/examples/2_medium/censo_agropecuario/create_data.rb +10 -0
- data/examples/2_medium/censo_agropecuario/resultset.csv +51 -0
- data/examples/{nested_grid.rb → 2_medium/nested_grid.rb} +3 -4
- data/examples/{area.rb → 3_pv_conventional/area.rb} +1 -1
- data/examples/{bar_column_chart.rb → 3_pv_conventional/bar_column_chart.rb} +1 -1
- data/examples/{grouped_charts.rb → 3_pv_conventional/grouped_charts.rb} +1 -1
- data/examples/{line_and_step.rb → 3_pv_conventional/line_and_step.rb} +1 -1
- data/examples/{pie_and_donut.rb → 3_pv_conventional/pie_and_donut.rb} +1 -1
- data/examples/{scatterplot.rb → 3_pv_conventional/scatterplot.rb} +1 -1
- data/examples/{stacked_charts.rb → 3_pv_conventional/stacked_charts.rb} +1 -3
- data/examples/{antibiotics → 4_pv_custom/antibiotics}/antibiotics_data.rb +0 -0
- data/examples/{antibiotics → 4_pv_custom/antibiotics}/antibiotics_scatter.rb +1 -1
- data/examples/{antibiotics → 4_pv_custom/antibiotics}/antibiotics_wedge.rb +1 -1
- data/examples/{barley → 4_pv_custom/barley}/barley.rb +5 -1
- data/examples/{barley → 4_pv_custom/barley}/barley_data.rb +0 -0
- data/examples/{cars → 4_pv_custom/cars}/cars.rb +1 -1
- data/examples/{cars → 4_pv_custom/cars}/cars_data.rb +0 -0
- data/examples/{crimea → 4_pv_custom/crimea}/crimea_data.rb +0 -0
- data/examples/{crimea → 4_pv_custom/crimea}/crimea_grouped_bar.rb +1 -1
- data/examples/{crimea → 4_pv_custom/crimea}/crimea_line.rb +1 -1
- data/examples/{bubble_charts.rb → 5_pv_hierarchies/bubble_charts.rb} +3 -2
- data/examples/5_pv_hierarchies/bubble_charts_matrix.rb +64 -0
- data/examples/{circle_packing.rb → 5_pv_hierarchies/circle_packing.rb} +4 -4
- data/examples/{dendogram.rb → 5_pv_hierarchies/dendogram.rb} +2 -2
- data/examples/{icicle.rb → 5_pv_hierarchies/icicle.rb} +2 -2
- data/examples/{indent.rb → 5_pv_hierarchies/indent.rb} +2 -2
- data/examples/5_pv_hierarchies/node_link_tree.rb +52 -0
- data/examples/{sunburst.rb → 5_pv_hierarchies/sunburst.rb} +2 -2
- data/examples/5_pv_hierarchies/treemap.rb +48 -0
- data/lib/rubyvis.rb +1 -1
- data/lib/rubyvis/dom.rb +16 -1
- data/lib/rubyvis/internals.rb +2 -2
- data/lib/rubyvis/layout.rb +2 -0
- data/lib/rubyvis/layout/grid.rb +105 -0
- data/lib/rubyvis/layout/pack.rb +53 -54
- data/lib/rubyvis/layout/stack.rb +26 -24
- data/lib/rubyvis/layout/tree.rb +267 -0
- data/lib/rubyvis/layout/treemap.rb +1 -0
- data/lib/rubyvis/mark.rb +10 -8
- data/lib/rubyvis/mark/area.rb +6 -6
- data/lib/rubyvis/mark/dot.rb +1 -1
- data/lib/rubyvis/mark/shorcut_methods.rb +29 -2
- data/lib/rubyvis/nest.rb +48 -2
- data/lib/rubyvis/scale/ordinal.rb +6 -6
- data/lib/rubyvis/scale/quantitative.rb +13 -7
- data/lib/rubyvis/scene/svg_area.rb +20 -14
- data/lib/rubyvis/scene/svg_bar.rb +1 -1
- data/lib/rubyvis/scene/svg_scene.rb +0 -1
- data/lib/rubyvis/sceneelement.rb +1 -1
- data/spec/area_spec.rb +12 -0
- data/spec/dom_spec.rb +15 -8
- data/spec/layout_stack_spec.rb +70 -0
- data/spec/nest_spec.rb +8 -2
- data/spec/scale_linear_spec.rb +7 -1
- data/spec/scale_ordinal_spec.rb +4 -0
- data/spec/spec_helper.rb +1 -1
- data/web/build_site.rb +6 -2
- data/web/index.haml +2 -2
- metadata +61 -68
- metadata.gz.sig +0 -0
- data/examples/treemap/treemap.rb +0 -29
- data/examples/treemap/treemap_data.rb +0 -285
|
@@ -82,6 +82,7 @@ module Rubyvis
|
|
|
82
82
|
end
|
|
83
83
|
@r[@i[x] % @r.size]
|
|
84
84
|
end
|
|
85
|
+
alias :[] :scale
|
|
85
86
|
# Sets or gets the input domain. This method can be invoked several ways:
|
|
86
87
|
#
|
|
87
88
|
# <p>1. <tt>domain(values...)</tt>
|
|
@@ -115,14 +116,13 @@ module Rubyvis
|
|
|
115
116
|
# Sets the range from the given continuous interval. The interval [<i>
|
|
116
117
|
# min</i>, <i>max</i>] is subdivided into <i>n</i> equispaced bands,
|
|
117
118
|
# where <i>n</i> is the number of (unique) values in the domain. The first
|
|
118
|
-
# and last band are offset from the edge of the range by the distance between
|
|
119
|
-
#
|
|
120
|
-
#
|
|
119
|
+
# and last band are offset from the edge of the range by the distance between bands.
|
|
120
|
+
#
|
|
121
121
|
# <p>The band width argument, <tt>band</tt>, is typically in the range [0, 1]
|
|
122
122
|
# and defaults to 1. This fraction corresponds to the amount of space in the
|
|
123
|
-
# range to allocate to the bands, as opposed to padding. A value of 0.5
|
|
124
|
-
# that the band width will be equal to the padding width.
|
|
125
|
-
# absolute band width can be retrieved from the range as
|
|
123
|
+
# range to allocate to the bands, as opposed to padding. A value of 0.5
|
|
124
|
+
# means that the band width will be equal to the padding width.
|
|
125
|
+
# The computed absolute band width can be retrieved from the range as
|
|
126
126
|
# <tt>scale.range_band</tt>.
|
|
127
127
|
#
|
|
128
128
|
# <p>If the band width argument is negative, this method will allocate bands
|
|
@@ -102,10 +102,7 @@ module Rubyvis
|
|
|
102
102
|
# puts "Segundo #{(@l[j + 1] - @l[j])}"
|
|
103
103
|
@i[j].call((@f.call(x) - @l[j]) .quo(@l[j + 1] - @l[j]));
|
|
104
104
|
end
|
|
105
|
-
|
|
106
|
-
def [](x)
|
|
107
|
-
scale(x)
|
|
108
|
-
end
|
|
105
|
+
alias :[] :scale
|
|
109
106
|
def transform(forward, inverse)
|
|
110
107
|
@f=lambda {|x| @n ? -forward.call(-x) : forward.call(x); }
|
|
111
108
|
@g=lambda {|y| @n ? -inverse.call(-y) : inverse.call(y); }
|
|
@@ -417,20 +414,29 @@ module Rubyvis
|
|
|
417
414
|
#
|
|
418
415
|
# This method must be invoked each time after setting the domain.
|
|
419
416
|
def nice
|
|
420
|
-
if
|
|
421
|
-
return self;
|
|
422
|
-
end
|
|
417
|
+
return self if @d.size!=2
|
|
423
418
|
start=@d.first
|
|
424
419
|
_end=@d[@d.size-1]
|
|
425
420
|
reverse=_end<start
|
|
426
421
|
min=reverse ? _end : start
|
|
427
422
|
max = reverse ? start : _end
|
|
428
423
|
span=max-min
|
|
424
|
+
|
|
429
425
|
return self if(!span or span.infinite?)
|
|
426
|
+
|
|
430
427
|
step=10**((Math::log(span).quo(Math::log(10))).round-1)
|
|
431
428
|
@d=[(min.quo(step)).floor*step, (max.quo(step)).ceil*step]
|
|
432
429
|
@d.reverse if reverse
|
|
433
430
|
@l=@d.map {|v| @f.call(v)}
|
|
431
|
+
self
|
|
434
432
|
end
|
|
433
|
+
def by(f)
|
|
434
|
+
that=self
|
|
435
|
+
lambda {|*args|
|
|
436
|
+
that.scale(f.js_apply(self,args))
|
|
437
|
+
}
|
|
438
|
+
end
|
|
439
|
+
|
|
440
|
+
|
|
435
441
|
end
|
|
436
442
|
end
|
|
@@ -15,16 +15,17 @@ module Rubyvis
|
|
|
15
15
|
# Computes the straight path for the range [i, j]
|
|
16
16
|
path=lambda {|ii,j|
|
|
17
17
|
p1 = []
|
|
18
|
-
p2 = []
|
|
18
|
+
p2 = []
|
|
19
19
|
k=j
|
|
20
20
|
(ii..k).each {|i|
|
|
21
21
|
si = scenes[i]
|
|
22
22
|
sj = scenes[j]
|
|
23
23
|
pi = "#{si.left},#{si.top}"
|
|
24
24
|
pj = "#{(sj.left + sj.width)},#{(sj.top + sj.height)}"
|
|
25
|
-
|
|
25
|
+
puts "#{i}:"+pi+","+pj if $DEBUG
|
|
26
26
|
#/* interpolate */
|
|
27
|
-
|
|
27
|
+
|
|
28
|
+
if (i < k)
|
|
28
29
|
sk = scenes[i + 1]
|
|
29
30
|
sl = scenes[j - 1]
|
|
30
31
|
case (s.interpolate)
|
|
@@ -38,8 +39,8 @@ module Rubyvis
|
|
|
38
39
|
end
|
|
39
40
|
end
|
|
40
41
|
|
|
41
|
-
p1.push(pi)
|
|
42
|
-
p2.push(pj)
|
|
42
|
+
p1.push(pi)
|
|
43
|
+
p2.push(pj)
|
|
43
44
|
j=j-1
|
|
44
45
|
}
|
|
45
46
|
(p1+p2).join("L");
|
|
@@ -82,17 +83,21 @@ module Rubyvis
|
|
|
82
83
|
i=0
|
|
83
84
|
# puts "Scenes:#{scenes.size}, interpolation:#{scenes[0].interpolate}"
|
|
84
85
|
|
|
85
|
-
while(i<scenes.size)
|
|
86
|
-
|
|
86
|
+
while(i < scenes.size)
|
|
87
87
|
si = scenes[i]
|
|
88
|
-
|
|
89
|
-
|
|
88
|
+
if (si.width==0 and si.height==0)
|
|
89
|
+
i+=1
|
|
90
|
+
next
|
|
91
|
+
end
|
|
90
92
|
|
|
91
|
-
j=
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
93
|
+
j=i+1
|
|
94
|
+
while(j<scenes.size) do
|
|
95
|
+
sj=scenes[j]
|
|
96
|
+
break if sj.width==0 and sj.height==0
|
|
97
|
+
j+=1
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
puts "j:#{j}" if $DEBUG
|
|
96
101
|
|
|
97
102
|
i=i-1 if (i!=0 and (s.interpolate != "step-after"))
|
|
98
103
|
|
|
@@ -104,6 +109,7 @@ module Rubyvis
|
|
|
104
109
|
i+=1
|
|
105
110
|
|
|
106
111
|
end
|
|
112
|
+
|
|
107
113
|
return e if d.size==0
|
|
108
114
|
|
|
109
115
|
e = self.expect(e, "path", {
|
|
@@ -6,7 +6,7 @@ module Rubyvis
|
|
|
6
6
|
next unless s.visible
|
|
7
7
|
fill=s.fill_style
|
|
8
8
|
stroke=s.stroke_style
|
|
9
|
-
next if(fill.opacity==0
|
|
9
|
+
next if(fill.opacity==0 and stroke.opacity==0)
|
|
10
10
|
e=SvgScene.expect(e,'rect', {
|
|
11
11
|
"shape-rendering"=> s.antialias ? nil : "crispEdges",
|
|
12
12
|
"pointer-events"=> s.events,
|
data/lib/rubyvis/sceneelement.rb
CHANGED
|
@@ -8,7 +8,7 @@ module Rubyvis
|
|
|
8
8
|
end
|
|
9
9
|
include Enumerable
|
|
10
10
|
attr_accessor :visible
|
|
11
|
-
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,:url, :image_width, :image_height, :image, :_id, :nodes, :round, :links, :padding_left, :padding_right, :padding_top, :padding_bottom, :mode, :group, :depth, :breadth, :spacing
|
|
11
|
+
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,:url, :image_width, :image_height, :image, :_id, :nodes, :round, :links, :padding_left, :padding_right, :padding_top, :padding_bottom, :mode, :group, :depth, :breadth, :spacing, :rows, :cols, :_grid
|
|
12
12
|
|
|
13
13
|
def []=(v,i)
|
|
14
14
|
if v.is_a? Numeric
|
data/spec/area_spec.rb
CHANGED
|
@@ -15,6 +15,18 @@ describe Rubyvis::Area do
|
|
|
15
15
|
left(lambda {index*20}).
|
|
16
16
|
bottom(0)
|
|
17
17
|
end
|
|
18
|
+
it "should return correct path with 0 on one value" do
|
|
19
|
+
|
|
20
|
+
@area.data([1,0,2])
|
|
21
|
+
@vis.render
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
doc=Nokogiri::XML(@vis.to_svg)
|
|
25
|
+
# <svg font-size="10px" font-family="sans-serif" fill="none" stroke="none" stroke-width="1.5" width="200" height="200"><g><path d="M0,180L20,200L20,200L0,200ZM20,200L40,160L40,200L20,200Z" fill="rgb(31,119,180)"/></g></svg>
|
|
26
|
+
doc.at_xpath("//xmlns:path").should have_path_data_close_to "M0,180L20,200L20,200L0,200ZM20,200L40,160L40,200L20,200Z"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
|
|
18
30
|
it "should return correct default (linear) path" do
|
|
19
31
|
@vis.render
|
|
20
32
|
doc=Nokogiri::XML(@vis.to_svg)
|
data/spec/dom_spec.rb
CHANGED
|
@@ -169,17 +169,24 @@ describe Rubyvis::Dom do
|
|
|
169
169
|
end
|
|
170
170
|
|
|
171
171
|
it "method visit_before" do
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
172
|
+
@n.visit_before {|n,d|
|
|
173
|
+
@a.push([n.node_value,d])
|
|
174
|
+
}
|
|
175
|
+
@a.should eq [[:a, 0], [:b, 1], [:e, 2], [:c, 1], [:d, 2]]
|
|
176
176
|
end
|
|
177
177
|
|
|
178
178
|
it "method visit_after" do
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
179
|
+
@n.visit_after {|n,d|
|
|
180
|
+
@a.push([n.node_value,d])
|
|
181
|
+
}
|
|
182
|
+
@a.should eq [[:e, 2], [:b, 1], [:d, 2], [:c, 1], [:a, 0]]
|
|
183
|
+
end
|
|
184
|
+
it "method each_child" do
|
|
185
|
+
@n.append_child(@n5)
|
|
186
|
+
@n.each_child {|d|
|
|
187
|
+
@a.push(d.node_value)
|
|
188
|
+
}
|
|
189
|
+
@a.should eq [:b, :c,:e]
|
|
183
190
|
end
|
|
184
191
|
end
|
|
185
192
|
it "should sort correctly" do
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__)+"/spec_helper.rb")
|
|
2
|
+
describe Rubyvis::Layout::Stack do
|
|
3
|
+
it "should have correct properties" do
|
|
4
|
+
props=[:antialias, :bottom, :canvas, :cursor, :data, :events, :fill_style, :height, :id, :layers, :left, :line_width, :offset, :order, :orient, :overflow, :reverse, :right, :stroke_style, :title, :top, :transform, :visible, :width].inject({}) {|ac, v| ac[v]=true; ac}
|
|
5
|
+
Rubyvis::Layout::Stack.properties.should==props
|
|
6
|
+
end
|
|
7
|
+
describe "rendered" do
|
|
8
|
+
before do
|
|
9
|
+
@h=200
|
|
10
|
+
@w=200
|
|
11
|
+
|
|
12
|
+
@x=Rubyvis::Scale.linear(0,3).range(0,@w)
|
|
13
|
+
@y=Rubyvis::Scale.linear(0,10).range(0,@h)
|
|
14
|
+
|
|
15
|
+
@vis = Rubyvis.Panel.new.width(@w).height(@h)
|
|
16
|
+
@stack=@vis.add(Rubyvis::Layout::Stack)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
describe "only with layers()" do
|
|
20
|
+
before do
|
|
21
|
+
x=@x
|
|
22
|
+
y=@y
|
|
23
|
+
@data=[[1,3,2],[2,1,3]]
|
|
24
|
+
@stack.
|
|
25
|
+
layers(@data).
|
|
26
|
+
x(lambda {|d| x.scale(index)}).
|
|
27
|
+
y(lambda {|d| y.scale(d)}).layer.add(Rubyvis::Area)
|
|
28
|
+
@vis.render
|
|
29
|
+
doc=Nokogiri::XML(@vis.to_svg)
|
|
30
|
+
@paths=doc.xpath("//xmlns:path")
|
|
31
|
+
# <svg font-size="10px" font-family="sans-serif" fill="none" stroke="none" stroke-width="1.5" width="200" height="200"><g><g><g><path d="M0,180L66.66666666666666,140L133.33333333333331,160L133.33333333333331,200L66.66666666666666,200L0,200Z" fill="rgb(31,119,180)"/></g><g><path d="M0,140L66.66666666666666,120L133.33333333333331,100L133.33333333333331,160L66.66666666666666,140L0,180Z" fill="rgb(174,199,232)"/></g></g></g></svg>
|
|
32
|
+
end
|
|
33
|
+
it "should return correct number of areas" do
|
|
34
|
+
@paths.size.should eq 2
|
|
35
|
+
end
|
|
36
|
+
it "should return correct path 1" do
|
|
37
|
+
@paths[0].should have_path_data_close_to "M0 180L66.66666666666666 140L133.33333333333331 160L133.33333333333331 200L66.66666666666666 200L0 200Z"
|
|
38
|
+
end
|
|
39
|
+
it "should return correct path 2" do
|
|
40
|
+
@paths[1].should have_path_data_close_to "M0 140L66.66666666666666 120L133.33333333333331 100L133.33333333333331 160L66.66666666666666 140L0 180Z"
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
describe "using layers() and values()" do
|
|
44
|
+
before do
|
|
45
|
+
x=@x
|
|
46
|
+
y=@y
|
|
47
|
+
@data=[{:first=>1,:second=>2},{:first=>3,:second=>1},{:first=>2,:second=>3}]
|
|
48
|
+
@stack.
|
|
49
|
+
layers([:first,:second]).
|
|
50
|
+
values(@data).
|
|
51
|
+
x(lambda {|d| x.scale(index)}).
|
|
52
|
+
y(lambda {|d,dd| y.scale(d[dd])}).layer.add(Rubyvis::Area)
|
|
53
|
+
@vis.render
|
|
54
|
+
doc=Nokogiri::XML(@vis.to_svg)
|
|
55
|
+
@paths=doc.xpath("//xmlns:path")
|
|
56
|
+
# <svg font-size="10px" font-family="sans-serif" fill="none" stroke="none" stroke-width="1.5" width="200" height="200"><g><g><g><path d="M0,180L66.66666666666666,140L133.33333333333331,160L133.33333333333331,200L66.66666666666666,200L0,200Z" fill="rgb(31,119,180)"/></g><g><path d="M0,140L66.66666666666666,120L133.33333333333331,100L133.33333333333331,160L66.66666666666666,140L0,180Z" fill="rgb(174,199,232)"/></g></g></g></svg>
|
|
57
|
+
end
|
|
58
|
+
it "should return correct number of areas" do
|
|
59
|
+
@paths.size.should eq 2
|
|
60
|
+
end
|
|
61
|
+
it "should return correct path 1" do
|
|
62
|
+
@paths[0].should have_path_data_close_to "M0 180L66.66666666666666 140L133.33333333333331 160L133.33333333333331 200L66.66666666666666 200L0 200Z"
|
|
63
|
+
end
|
|
64
|
+
it "should return correct path 2" do
|
|
65
|
+
@paths[1].should have_path_data_close_to "M0 140L66.66666666666666 120L133.33333333333331 100L133.33333333333331 160L66.66666666666666 140L0 180Z"
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
data/spec/nest_spec.rb
CHANGED
|
@@ -6,14 +6,20 @@ describe Rubyvis::Nest do
|
|
|
6
6
|
{ :year=>2010, :city=>'France',:value=>2},
|
|
7
7
|
{ :year=>2011, :city=>'London',:value=>5},
|
|
8
8
|
{ :year=>2011, :city=>'France',:value=>6},
|
|
9
|
-
|
|
10
9
|
]
|
|
11
10
|
end
|
|
12
11
|
it "should generate correct map" do
|
|
13
|
-
nest = pv.nest(@data).key(lambda {|d| d[:year]}).key(lambda {|d| d[:city]}).map()
|
|
12
|
+
nest = pv.nest(@data).key(lambda {|d| d[:year]}).key(lambda {|d| d[:city]}).map()
|
|
13
|
+
|
|
14
14
|
expected={2010=>{"London"=>[{:year=>2010, :city=>"London", :value=>1}], "France"=>[{:year=>2010, :city=>"France", :value=>2}]}, 2011=>{"London"=>[{:year=>2011, :city=>"London", :value=>5}], "France"=>[{:year=>2011, :city=>"France", :value=>6}]}}
|
|
15
15
|
nest.should==expected
|
|
16
16
|
|
|
17
|
+
end
|
|
18
|
+
it "should generate correct rollup" do
|
|
19
|
+
nest = pv.nest(@data).key(lambda {|d| d[:year]}).key(lambda {|d| d[:city]}).rollup(lambda {|d| d.map{|dd| dd[:value]}})
|
|
20
|
+
expected={2010=>{"London"=>[1], "France"=>[2]}, 2011=>{"London"=>[5], "France"=>[6]}}
|
|
21
|
+
nest.should==expected
|
|
22
|
+
|
|
17
23
|
end
|
|
18
24
|
it "should generate correct entries" do
|
|
19
25
|
nest = pv.nest(@data).key(lambda {|d| d[:year]}).key(lambda {|d| d[:city]}).entries();
|
data/spec/scale_linear_spec.rb
CHANGED
|
@@ -119,6 +119,12 @@ describe Rubyvis::Scale::Linear do
|
|
|
119
119
|
@y.range(0.000001,0.0001)
|
|
120
120
|
@y.ticks.should==[1.quo(100000), 1.quo(50000), 3.quo(100000), 1.quo(25000), 1.quo(20000), 3.quo(50000), 7.quo(100000), 1.quo(12500), 9.quo(100000), 1.quo(10000)]
|
|
121
121
|
@y.tick_format.call(0.2).should=='0.20000'
|
|
122
|
-
|
|
123
122
|
end
|
|
123
|
+
it "should return correct by" do
|
|
124
|
+
by=@y.by(lambda {|v| v.value})
|
|
125
|
+
a=OpenStruct.new({:value=>rand})
|
|
126
|
+
by.call(a).should==@y[a.value]
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
|
|
124
130
|
end
|
data/spec/scale_ordinal_spec.rb
CHANGED
|
@@ -62,6 +62,10 @@ describe Rubyvis::Scale::Ordinal do
|
|
|
62
62
|
@y.scale(9).should==pv.color('blue')
|
|
63
63
|
@y.scale(1).should==pv.color('red')
|
|
64
64
|
end
|
|
65
|
+
it "should return the same using [] and scale()" do
|
|
66
|
+
a=rand()
|
|
67
|
+
@y[a].should==@y.scale(a)
|
|
68
|
+
end
|
|
65
69
|
it "should returns correct scale with known values" do
|
|
66
70
|
@y.scale('a').should==pv.color('red')
|
|
67
71
|
@y.scale('b').should==pv.color('white')
|
data/spec/spec_helper.rb
CHANGED
|
@@ -58,6 +58,6 @@ RSpec::Matchers.define :have_path_data_close_to do |exp|
|
|
|
58
58
|
failure_message_for_should do |obs|
|
|
59
59
|
obs_array=path_scan(obs.attributes["d"].value)
|
|
60
60
|
exp_array=path_scan(exp)
|
|
61
|
-
"#{obs_array} path should be equal to #{exp_array}"
|
|
61
|
+
"\n#{obs_array} path should be equal to \n#{exp_array}"
|
|
62
62
|
end
|
|
63
63
|
end
|
data/web/build_site.rb
CHANGED
|
@@ -48,11 +48,15 @@ files.each do |f|
|
|
|
48
48
|
source_a=[]
|
|
49
49
|
previous_example=""
|
|
50
50
|
next_example=""
|
|
51
|
+
title_obtained=false
|
|
51
52
|
fp.each do |line|
|
|
52
|
-
if line=~/\s*#\s*
|
|
53
|
+
if line=~/\s*#\s*encoding:/
|
|
54
|
+
next
|
|
55
|
+
elsif line=~/\s*#\s*(.+)/ and !comment
|
|
53
56
|
t=$1
|
|
54
|
-
if t=~
|
|
57
|
+
if t=~ /^=\s*(.+)$/ and !title_obtained
|
|
55
58
|
title=$1
|
|
59
|
+
title_obtained=true
|
|
56
60
|
else
|
|
57
61
|
text << t
|
|
58
62
|
end
|
data/web/index.haml
CHANGED
|
@@ -69,8 +69,8 @@
|
|
|
69
69
|
%div
|
|
70
70
|
%h3 Image
|
|
71
71
|
/[if IE]
|
|
72
|
-
%embed{:src=>"examples/
|
|
73
|
-
%object{:data=>"examples/
|
|
72
|
+
%embed{:src=>"examples/1_basic_1a_bar_rbp_api.svg" ,:width=>"150", :height=>"150"}
|
|
73
|
+
%object{:data=>"examples/1_basic_1a_bar_rbp_api.svg", :type=>"image/svg+xml", :width=>150,:height=>150}
|
|
74
74
|
.examples_div
|
|
75
75
|
%h2 Examples
|
|
76
76
|
%p
|
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rubyvis
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
hash:
|
|
4
|
+
hash: 27
|
|
5
5
|
prerelease: false
|
|
6
6
|
segments:
|
|
7
7
|
- 0
|
|
8
8
|
- 3
|
|
9
|
-
-
|
|
10
|
-
version: 0.3.
|
|
9
|
+
- 4
|
|
10
|
+
version: 0.3.4
|
|
11
11
|
platform: ruby
|
|
12
12
|
authors:
|
|
13
13
|
- Claudio Bustos
|
|
@@ -36,27 +36,25 @@ cert_chain:
|
|
|
36
36
|
rpP0jjs0
|
|
37
37
|
-----END CERTIFICATE-----
|
|
38
38
|
|
|
39
|
-
date: 2010-11
|
|
39
|
+
date: 2010-12-11 00:00:00 -03:00
|
|
40
40
|
default_executable:
|
|
41
41
|
dependencies:
|
|
42
42
|
- !ruby/object:Gem::Dependency
|
|
43
|
-
name:
|
|
43
|
+
name: coderay
|
|
44
44
|
prerelease: false
|
|
45
45
|
requirement: &id001 !ruby/object:Gem::Requirement
|
|
46
46
|
none: false
|
|
47
47
|
requirements:
|
|
48
48
|
- - ">="
|
|
49
49
|
- !ruby/object:Gem::Version
|
|
50
|
-
hash:
|
|
50
|
+
hash: 3
|
|
51
51
|
segments:
|
|
52
|
-
- 2
|
|
53
52
|
- 0
|
|
54
|
-
|
|
55
|
-
version: 2.0.4
|
|
53
|
+
version: "0"
|
|
56
54
|
type: :development
|
|
57
55
|
version_requirements: *id001
|
|
58
56
|
- !ruby/object:Gem::Dependency
|
|
59
|
-
name:
|
|
57
|
+
name: haml
|
|
60
58
|
prerelease: false
|
|
61
59
|
requirement: &id002 !ruby/object:Gem::Requirement
|
|
62
60
|
none: false
|
|
@@ -70,7 +68,7 @@ dependencies:
|
|
|
70
68
|
type: :development
|
|
71
69
|
version_requirements: *id002
|
|
72
70
|
- !ruby/object:Gem::Dependency
|
|
73
|
-
name:
|
|
71
|
+
name: nokogiri
|
|
74
72
|
prerelease: false
|
|
75
73
|
requirement: &id003 !ruby/object:Gem::Requirement
|
|
76
74
|
none: false
|
|
@@ -83,24 +81,10 @@ dependencies:
|
|
|
83
81
|
version: "0"
|
|
84
82
|
type: :development
|
|
85
83
|
version_requirements: *id003
|
|
86
|
-
- !ruby/object:Gem::Dependency
|
|
87
|
-
name: nokogiri
|
|
88
|
-
prerelease: false
|
|
89
|
-
requirement: &id004 !ruby/object:Gem::Requirement
|
|
90
|
-
none: false
|
|
91
|
-
requirements:
|
|
92
|
-
- - ">="
|
|
93
|
-
- !ruby/object:Gem::Version
|
|
94
|
-
hash: 3
|
|
95
|
-
segments:
|
|
96
|
-
- 0
|
|
97
|
-
version: "0"
|
|
98
|
-
type: :development
|
|
99
|
-
version_requirements: *id004
|
|
100
84
|
- !ruby/object:Gem::Dependency
|
|
101
85
|
name: rspec
|
|
102
86
|
prerelease: false
|
|
103
|
-
requirement: &
|
|
87
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
|
104
88
|
none: false
|
|
105
89
|
requirements:
|
|
106
90
|
- - ">="
|
|
@@ -111,23 +95,23 @@ dependencies:
|
|
|
111
95
|
- 0
|
|
112
96
|
version: "2.0"
|
|
113
97
|
type: :development
|
|
114
|
-
version_requirements: *
|
|
98
|
+
version_requirements: *id004
|
|
115
99
|
- !ruby/object:Gem::Dependency
|
|
116
100
|
name: hoe
|
|
117
101
|
prerelease: false
|
|
118
|
-
requirement: &
|
|
102
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
|
119
103
|
none: false
|
|
120
104
|
requirements:
|
|
121
105
|
- - ">="
|
|
122
106
|
- !ruby/object:Gem::Version
|
|
123
|
-
hash:
|
|
107
|
+
hash: 47
|
|
124
108
|
segments:
|
|
125
109
|
- 2
|
|
126
|
-
-
|
|
110
|
+
- 8
|
|
127
111
|
- 0
|
|
128
|
-
version: 2.
|
|
112
|
+
version: 2.8.0
|
|
129
113
|
type: :development
|
|
130
|
-
version_requirements: *
|
|
114
|
+
version_requirements: *id005
|
|
131
115
|
description: Ruby port of Protovis[http://vis.stanford.edu/protovis/], a great visualization toolkit
|
|
132
116
|
email:
|
|
133
117
|
- clbustos_at_gmail.com
|
|
@@ -144,42 +128,48 @@ files:
|
|
|
144
128
|
- Manifest.txt
|
|
145
129
|
- README.txt
|
|
146
130
|
- Rakefile
|
|
147
|
-
- examples/
|
|
148
|
-
- examples/
|
|
149
|
-
- examples/
|
|
150
|
-
- examples/
|
|
151
|
-
- examples/area_interpolation.rb
|
|
152
|
-
- examples/
|
|
153
|
-
- examples/
|
|
154
|
-
- examples/
|
|
155
|
-
- examples/
|
|
156
|
-
- examples/
|
|
157
|
-
- examples/
|
|
158
|
-
- examples/
|
|
159
|
-
- examples/
|
|
160
|
-
- examples/
|
|
161
|
-
- examples/
|
|
162
|
-
- examples/
|
|
163
|
-
- examples/
|
|
164
|
-
- examples/
|
|
165
|
-
- examples/
|
|
166
|
-
- examples/
|
|
167
|
-
- examples/
|
|
168
|
-
- examples/
|
|
169
|
-
- examples/
|
|
170
|
-
- examples/
|
|
171
|
-
- examples/
|
|
172
|
-
- examples/
|
|
173
|
-
- examples/
|
|
174
|
-
- examples/
|
|
175
|
-
- examples/
|
|
176
|
-
- examples/
|
|
177
|
-
- examples/
|
|
178
|
-
- examples/
|
|
179
|
-
- examples/
|
|
180
|
-
- examples/
|
|
181
|
-
- examples/
|
|
182
|
-
- examples/
|
|
131
|
+
- examples/1_basic/1a_bar_rbp_api.rb
|
|
132
|
+
- examples/1_basic/1b_bar_pv_api.rb
|
|
133
|
+
- examples/1_basic/2_bar_and_rule.rb
|
|
134
|
+
- examples/1_basic/3_grouped_bars.rb
|
|
135
|
+
- examples/1_basic/area_interpolation.rb
|
|
136
|
+
- examples/1_basic/dot.rb
|
|
137
|
+
- examples/1_basic/fixtures/tipsy.gif
|
|
138
|
+
- examples/1_basic/grid.rb
|
|
139
|
+
- examples/1_basic/image.rb
|
|
140
|
+
- examples/1_basic/line.rb
|
|
141
|
+
- examples/1_basic/line_interpolation.rb
|
|
142
|
+
- examples/2_medium/censo_agropecuario/censo_agropecuario_chile_data.rb
|
|
143
|
+
- examples/2_medium/censo_agropecuario/census_treemap.rb
|
|
144
|
+
- examples/2_medium/censo_agropecuario/create_data.rb
|
|
145
|
+
- examples/2_medium/censo_agropecuario/resultset.csv
|
|
146
|
+
- examples/2_medium/nested_grid.rb
|
|
147
|
+
- examples/3_pv_conventional/area.rb
|
|
148
|
+
- examples/3_pv_conventional/bar_column_chart.rb
|
|
149
|
+
- examples/3_pv_conventional/grouped_charts.rb
|
|
150
|
+
- examples/3_pv_conventional/line_and_step.rb
|
|
151
|
+
- examples/3_pv_conventional/pie_and_donut.rb
|
|
152
|
+
- examples/3_pv_conventional/scatterplot.rb
|
|
153
|
+
- examples/3_pv_conventional/stacked_charts.rb
|
|
154
|
+
- examples/4_pv_custom/antibiotics/antibiotics_data.rb
|
|
155
|
+
- examples/4_pv_custom/antibiotics/antibiotics_scatter.rb
|
|
156
|
+
- examples/4_pv_custom/antibiotics/antibiotics_wedge.rb
|
|
157
|
+
- examples/4_pv_custom/barley/barley.rb
|
|
158
|
+
- examples/4_pv_custom/barley/barley_data.rb
|
|
159
|
+
- examples/4_pv_custom/cars/cars.rb
|
|
160
|
+
- examples/4_pv_custom/cars/cars_data.rb
|
|
161
|
+
- examples/4_pv_custom/crimea/crimea_data.rb
|
|
162
|
+
- examples/4_pv_custom/crimea/crimea_grouped_bar.rb
|
|
163
|
+
- examples/4_pv_custom/crimea/crimea_line.rb
|
|
164
|
+
- examples/5_pv_hierarchies/bubble_charts.rb
|
|
165
|
+
- examples/5_pv_hierarchies/bubble_charts_matrix.rb
|
|
166
|
+
- examples/5_pv_hierarchies/circle_packing.rb
|
|
167
|
+
- examples/5_pv_hierarchies/dendogram.rb
|
|
168
|
+
- examples/5_pv_hierarchies/icicle.rb
|
|
169
|
+
- examples/5_pv_hierarchies/indent.rb
|
|
170
|
+
- examples/5_pv_hierarchies/node_link_tree.rb
|
|
171
|
+
- examples/5_pv_hierarchies/sunburst.rb
|
|
172
|
+
- examples/5_pv_hierarchies/treemap.rb
|
|
183
173
|
- lib/rubyvis.rb
|
|
184
174
|
- lib/rubyvis/color/color.rb
|
|
185
175
|
- lib/rubyvis/color/colors.rb
|
|
@@ -193,12 +183,14 @@ files:
|
|
|
193
183
|
- lib/rubyvis/javascript_behaviour.rb
|
|
194
184
|
- lib/rubyvis/layout.rb
|
|
195
185
|
- lib/rubyvis/layout/cluster.rb
|
|
186
|
+
- lib/rubyvis/layout/grid.rb
|
|
196
187
|
- lib/rubyvis/layout/hierarchy.rb
|
|
197
188
|
- lib/rubyvis/layout/indent.rb
|
|
198
189
|
- lib/rubyvis/layout/network.rb
|
|
199
190
|
- lib/rubyvis/layout/pack.rb
|
|
200
191
|
- lib/rubyvis/layout/partition.rb
|
|
201
192
|
- lib/rubyvis/layout/stack.rb
|
|
193
|
+
- lib/rubyvis/layout/tree.rb
|
|
202
194
|
- lib/rubyvis/layout/treemap.rb
|
|
203
195
|
- lib/rubyvis/mark.rb
|
|
204
196
|
- lib/rubyvis/mark/anchor.rb
|
|
@@ -240,6 +232,7 @@ files:
|
|
|
240
232
|
- spec/internal_spec.rb
|
|
241
233
|
- spec/javascript_behaviour_spec.rb
|
|
242
234
|
- spec/label_spec.rb
|
|
235
|
+
- spec/layout_stack_spec.rb
|
|
243
236
|
- spec/line_spec.rb
|
|
244
237
|
- spec/mark_spec.rb
|
|
245
238
|
- spec/nest_spec.rb
|