plotrb 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1cb130ede17a9ef0b2319d7eb472b67ee2e69faf
4
+ data.tar.gz: 94c59902102147772878189ef8fbde5f4d688adc
5
+ SHA512:
6
+ metadata.gz: e144eba4faaa1d534d6359d0e85fd983e90002766bff821a2b20dffbb51bc8cf9410cd1db48606fe264b691bb217decf38946cce9a7c6ccefeae3292788cc1b9
7
+ data.tar.gz: 462e9b417011f6b2c58dbd10c4a4d3e87e2bfc0978f772e9dc942d43b483d713a12ea40d711f5b55e301feb4fbe8c9b3185c9da11777cbd01b68c769b7c42108
@@ -0,0 +1,19 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .idea
19
+ .DS_Store
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --colour --format documentation
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source 'http://rubygems.org'
2
+ gemspec
@@ -0,0 +1,38 @@
1
+ This version of Plotrb is licensed under the BSD 2-clause license.
2
+
3
+ * http://sciruby.com
4
+ * http://github.com/sciruby/sciruby/wiki/License
5
+
6
+ You *must* read the Contributor Agreement before contributing code to
7
+ the SciRuby Project. This is available online:
8
+
9
+ * http://github.com/sciruby/sciruby/wiki/Contributor-Agreement
10
+
11
+ -----
12
+
13
+ Copyright (c) 2010 - 2013, Wan Zuhao and the Ruby Science Foundation
14
+ All rights reserved.
15
+
16
+ Redistribution and use in source and binary forms, with or without
17
+ modification, are permitted provided that the following conditions are
18
+ met:
19
+
20
+ * Redistributions of source code must retain the above copyright notice,
21
+ this list of conditions and the following disclaimer.
22
+
23
+ * Redistributions in binary form must reproduce the above copyright
24
+ notice, this list of conditions and the following disclaimer in the
25
+ documentation and/or other materials provided with the distribution.
26
+
27
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
28
+ IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
29
+ TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
30
+ PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31
+ HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
33
+ TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
34
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
35
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
36
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
37
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38
+
@@ -0,0 +1,77 @@
1
+ = Plotrb
2
+
3
+ Vega/D3-based plotting gem for Ruby
4
+
5
+ * {sciruby.com}[http://sciruby.com]
6
+ * {Google+}[https://plus.google.com/109304769076178160953/posts]
7
+ * {Wan Zuhao}[http://www.wanzuhao.com]
8
+ * {Examples on bl.ocks.org}[http://bl.ocks.org/zuhao]
9
+
10
+ {<img src=https://travis-ci.org/zuhao/plotrb.png>}[https://travis-ci.org/zuhao/plotrb]
11
+
12
+ == Description
13
+
14
+ Plotrb is an experimental plotting library for the Ruby language. It
15
+ brings {the simplicity of Vega}[http://trifacta.github.io/vega/] and
16
+ {the power of D3}[http://d3js.org/] to the Ruby science community, to
17
+ allow for {fast, customizable design; reusability and shareability; programmatic generation of visualizations; and improved performance and platform flexibility}[https://github.com/trifacta/vega/wiki/Vega-and-D3].
18
+
19
+ Plotrb is in many ways the child of
20
+ {Rubyvis}[http://github.com/SciRuby/rubyvis] (the Ruby port of
21
+ Protovis). However, it improves upon Rubyvis in that it uses a DSL that
22
+ will be much more familiar and natural to Ruby coders.
23
+
24
+ Plotrb was created by Wan Zuhao as part of Google's Summer of Code 2013.
25
+ It is part of {SciRuby}[http://sciruby.com].
26
+
27
+ == Installation
28
+
29
+ Add this line to your application's Gemfile:
30
+
31
+ gem 'plotrb'
32
+
33
+ And then execute:
34
+
35
+ bundle
36
+
37
+ Or install it yourself as:
38
+
39
+ gem install plotrb
40
+
41
+ == Usage
42
+
43
+ Currently, Plotrb is intended to generate JSON specification for Vega. If you would like to see the visualization rendered in PNG or SVG, you will have to install {Vega}[https://github.com/trifacta/vega] and use its {Headless Mode}[https://github.com/trifacta/vega/wiki/Headless-Mode].
44
+
45
+ Note that Plotrb is a work in progress, so we can't guarantee that every
46
+ example will work exactly.
47
+
48
+ * {Arc}[http://bl.ocks.org/zuhao/6663966]
49
+ * {Area}[http://bl.ocks.org/zuhao/6663999]
50
+ * {Bar}[http://bl.ocks.org/zuhao/6662333]
51
+ * {Barley}[http://bl.ocks.org/zuhao/6664828]
52
+ * {Lifelines}[http://bl.ocks.org/zuhao/6664107]
53
+
54
+ Examples may also be found in the `examples/` directory.
55
+
56
+ == Contributing
57
+
58
+ 1. Fork it
59
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
60
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
61
+ 4. Push to the branch (`git push origin my-new-feature`)
62
+ 5. Create new Pull Request
63
+
64
+ == License
65
+
66
+ Copyright (c) 2013, Wan Zuhao and the Ruby Science Foundation.
67
+
68
+ All rights reserved.
69
+
70
+ Plotrb, along with SciRuby, is licensed under the BSD 2-clause license. See
71
+ {LICENSE.txt}[https://github.com/SciRuby/sciruby/wiki/License] for details.
72
+
73
+ == Donations
74
+
75
+ Support a SciRuby Fellow:
76
+
77
+ {<img src=http://pledgie.com/campaigns/15783.png?skin_name=chrome>}[http://www.pledgie.com/campaigns/15783]
@@ -0,0 +1,7 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new
5
+
6
+ task :default => :spec
7
+ task :test => :spec
@@ -0,0 +1,31 @@
1
+ require 'plotrb'
2
+
3
+ data = pdata.name('table').values([12,23,47,6,52,19]).transform(pie_transform)
4
+
5
+ scale = sqrt_scale.name('r').from(data).to([20,100])
6
+
7
+ mark = arc_mark.from(data) do
8
+ enter do
9
+ x_start { group(:width).times(0.5) }
10
+ y_start { group(:height).times(0.5) }
11
+ start_angle { from :start_angle }
12
+ end_angle { from :end_angle }
13
+ inner_radius 20
14
+ outer_radius { scale(scale) }
15
+ stroke '#fff'
16
+ end
17
+ update do
18
+ fill '#ccc'
19
+ end
20
+ hover do
21
+ fill 'pink'
22
+ end
23
+ end
24
+
25
+ vis = visualization.name('arc').width(400).height(400) do
26
+ data data
27
+ scales scale
28
+ marks mark
29
+ end
30
+
31
+ puts vis.generate_spec(:pretty)
@@ -0,0 +1,48 @@
1
+ require './lib/plotrb.rb'
2
+
3
+ data = pdata.name('table').values(
4
+ [
5
+ {x: 1, y: 28}, {x: 2, y: 55},
6
+ {x: 3, y: 43}, {x: 4, y: 91},
7
+ {x: 5, y: 81}, {x: 6, y: 53},
8
+ {x: 7, y: 19}, {x: 8, y: 87},
9
+ {x: 9, y: 52}, {x: 10, y: 48},
10
+ {x: 11, y: 24}, {x: 12, y: 49},
11
+ {x: 13, y: 87}, {x: 14, y: 66},
12
+ {x: 15, y: 17}, {x: 16, y: 27},
13
+ {x: 17, y: 68}, {x: 18, y: 16},
14
+ {x: 19, y: 49}, {x: 20, y: 15}
15
+ ]
16
+ )
17
+
18
+ xs = linear_scale.name('x').from('table.x').to_width.exclude_zero
19
+ ys = linear_scale.name('y').from('table.y').to_height.nicely
20
+
21
+ xa = x_axis.scale(xs).ticks(20)
22
+ ya = y_axis.scale(ys)
23
+
24
+ mark = area_mark.from(data) do
25
+ enter do
26
+ interpolate :monotone
27
+ x_start {from('x').scale(xs)}
28
+ y_start {from('y').scale(ys)}
29
+ y_end {value(0).scale(ys)}
30
+ fill 'steelblue'
31
+ end
32
+ update do
33
+ fill_opacity 1
34
+ end
35
+ hover do
36
+ fill_opacity 0.5
37
+ end
38
+ end
39
+
40
+ vis = visualization.name('area').width(500).height(200) do
41
+ padding :top => 10, :left => 30, :bottom => 30, :right => 10
42
+ data data
43
+ scales xs, ys
44
+ axes xa, ya
45
+ marks mark
46
+ end
47
+
48
+ puts vis.generate_spec(:pretty)
@@ -0,0 +1,44 @@
1
+ require 'plotrb'
2
+
3
+ data = pdata.name('table').values(
4
+ [
5
+ {x: 1, y: 28}, {x: 2, y: 55},
6
+ {x: 3, y: 43}, {x: 4, y: 91},
7
+ {x: 5, y: 81}, {x: 6, y: 53},
8
+ {x: 7, y: 19}, {x: 8, y: 87},
9
+ {x: 9, y: 52}, {x: 10, y: 48},
10
+ {x: 11, y: 24}, {x: 12, y: 49},
11
+ {x: 13, y: 87}, {x: 14, y: 66},
12
+ {x: 15, y: 17}, {x: 16, y: 27},
13
+ {x: 17, y: 68}, {x: 18, y: 16},
14
+ {x: 19, y: 49}, {x: 20, y: 15}
15
+ ]
16
+ )
17
+
18
+ xs = ordinal_scale.name('x').from('table.x').to_width
19
+ ys = linear_scale.name('y').from('table.y').nicely.to_height
20
+
21
+ mark = rect_mark.from(data) do
22
+ enter do
23
+ x_start { scale(xs).from('x') }
24
+ width { scale(xs).offset(-1).use_band }
25
+ y_start { scale(ys).from('y') }
26
+ y_end { scale(ys).value(0) }
27
+ end
28
+ update do
29
+ fill 'steelblue'
30
+ end
31
+ hover do
32
+ fill 'red'
33
+ end
34
+ end
35
+
36
+ vis = visualization.width(400).height(200) do
37
+ padding top: 10, left: 30, bottom: 30, right: 10
38
+ data data
39
+ scales xs, ys
40
+ marks mark
41
+ axes x_axis.scale(xs), y_axis.scale(ys)
42
+ end
43
+
44
+ puts vis.generate_spec(:pretty)
@@ -0,0 +1,66 @@
1
+ require './lib/plotrb.rb'
2
+
3
+ raw_data = pdata.name('barley').url('barley_data.json')
4
+ variety = pdata.name('variety').source('barley').transform [
5
+ facet_transform.keys('variety'),
6
+ stats_transform.value('yield').median,
7
+ sort_transform.by('-median')
8
+ ]
9
+ site = pdata.name('site').source('barley').transform [
10
+ facet_transform.keys('site'),
11
+ stats_transform.value('yield').median,
12
+ sort_transform.by('-median')
13
+ ]
14
+
15
+ gs = ordinal_scale.name('g').padding(0.15).from('site.key').to_height
16
+ xs = linear_scale.name('x').from('barley.yield').to_width.nicely
17
+ cs = ordinal_scale.name('c').to_colors
18
+ ys = ordinal_scale.name('y').from('variety.key').to_height.as_points.padding(1.2)
19
+ xaxis = x_axis.scale(xs).offset(-12)
20
+ yaxis = y_axis.scale(ys).tick_size(0) do
21
+ properties(:axis) { stroke :transparent }
22
+ end
23
+
24
+
25
+ tm = text_mark.from(site) do
26
+ enter do
27
+ x { group(:width).times(0.5) }
28
+ y { scale(gs).field(:key).offset(-2) }
29
+ font_weight :bold
30
+ text { field(:key) }
31
+ align :center
32
+ baseline :bottom
33
+ fill '#000'
34
+ end
35
+ end
36
+
37
+ sm = symbol_mark.enter do
38
+ x { scale(xs).field('yield') }
39
+ y { scale(ys).field('variety') }
40
+ size 50
41
+ stroke { scale(cs).field('year') }
42
+ stroke_width 2
43
+ end
44
+
45
+ gm = group_mark.from(site) do
46
+ scales ys
47
+ axes yaxis
48
+ marks sm
49
+ enter do
50
+ x 0.5
51
+ y { scale(gs).field(:key) }
52
+ height { scale(gs).use_band }
53
+ width { group(:width) }
54
+ stroke '#ccc'
55
+ end
56
+ end
57
+
58
+ vis = visualization.width(200).height(720) do
59
+ data raw_data, variety, site
60
+ scales gs, cs, xs, ys
61
+ axes xaxis
62
+ marks tm, gm
63
+ end
64
+
65
+ puts vis.generate_spec(:pretty)
66
+
@@ -0,0 +1,48 @@
1
+ require './lib/plotrb.rb'
2
+
3
+ ump_data = pdata.name('unemp') do
4
+ url('unemployment.tsv')
5
+ format(:tsv) { parse :rate => :number }
6
+ end
7
+ cty_data = pdata.name('counties') do
8
+ url('us-10m.json')
9
+ format(:topojson) { feature 'counties' }
10
+ transform [
11
+ geopath_transform.projection(:albersUsa),
12
+ zip_transform.with('unemp').match('id').against('id').as('value').default(nil),
13
+ filter_transform.test('d.path!=null && d.value!=null')
14
+ ]
15
+ end
16
+
17
+ cs = quantize_scale.name('color').from([0, 0.15]).to(
18
+ [
19
+ "#f7fbff",
20
+ "#deebf7",
21
+ "#c6dbef",
22
+ "#9ecae1",
23
+ "#6baed6",
24
+ "#4292c6",
25
+ "#2171b5",
26
+ "#08519c",
27
+ "#08306b"
28
+ ])
29
+
30
+ mark = path_mark.from(cty_data) do
31
+ enter do
32
+ path { from 'path' }
33
+ end
34
+ update do
35
+ fill { scale(cs).from('value.data.rate') }
36
+ end
37
+ hover do
38
+ fill 'red'
39
+ end
40
+ end
41
+
42
+ vis = visualization.width(960).height(500) do
43
+ data ump_data, cty_data
44
+ scales cs
45
+ marks mark
46
+ end
47
+
48
+ puts vis.generate_spec(:pretty)
@@ -0,0 +1,106 @@
1
+ require './lib/plotrb.rb'
2
+
3
+ people = pdata.name('people').values(
4
+ [
5
+ {"label" => "Washington",
6
+ "born" => -7506057600000,
7
+ "died" => -5366196000000,
8
+ "enter" => -5701424400000,
9
+ "leave" => -5453884800000},
10
+ {"label" => "Adams",
11
+ "born" => -7389766800000,
12
+ "died" => -4528285200000,
13
+ "enter" => -5453884800000,
14
+ "leave" => -5327740800000},
15
+ {"label" => "Jefferson",
16
+ "born" => -7154586000000,
17
+ "died" => -4528285200000,
18
+ "enter" => -5327740800000,
19
+ "leave" => -5075280000000},
20
+ {"label" => "Madison",
21
+ "born" => -6904544400000,
22
+ "died" => -4213184400000,
23
+ "enter" => -5075280000000,
24
+ "leave" => -4822819200000},
25
+ {"label" => "Monroe",
26
+ "born" => -6679904400000,
27
+ "died" => -4370518800000,
28
+ "enter" => -4822819200000,
29
+ "leave" => -4570358400000}
30
+ ]
31
+ )
32
+
33
+ events = pdata.name('events') do
34
+ format(:json) { parse 'when' => :date }
35
+ values [
36
+ {"name" => "Decl. of Independence", "when" => "July 4, 1776"},
37
+ {"name" => "U.S. Constitution", "when" => "3/4/1789"},
38
+ {"name" => "Louisiana Purchase", "when" => "April 30, 1803"},
39
+ {"name" => "Monroe Doctrine", "when" => "Dec 2, 1823"}
40
+ ]
41
+ end
42
+
43
+ y_scale = ordinal_scale.name('y').from('people.label').to_height
44
+ x_scale = time_scale.name('x').from(['people.born', 'people.died']).to_width.round.in_years
45
+
46
+ events_mark_t = text_mark.from(events) do
47
+ enter do
48
+ x_start { scale(x_scale).from('when') }
49
+ y_start -10
50
+ angle -25
51
+ fill '#000'
52
+ text { from 'name' }
53
+ font 'Helvetica Neue'
54
+ font_size 10
55
+ end
56
+ end
57
+
58
+ events_mark_r = rect_mark.from(events) do
59
+ enter do
60
+ x_start { scale(x_scale).from('when') }
61
+ y_start -8
62
+ width 1
63
+ height { group(:height).offset(8) }
64
+ fill '#888'
65
+ end
66
+ end
67
+
68
+ people_mark_t = text_mark.from(people) do
69
+ enter do
70
+ x_start { scale(x_scale).from('born') }
71
+ y_start { scale(y_scale).from('label').offset(-3) }
72
+ fill '#000'
73
+ text { from('label') }
74
+ font 'Helvetica Neue'
75
+ font_size 10
76
+ end
77
+ end
78
+
79
+ people_mark_r = rect_mark.from(people) do
80
+ enter do
81
+ x_start { scale(x_scale).from('born') }
82
+ x_end { scale(x_scale).from('died') }
83
+ y_start { scale(y_scale).from('label') }
84
+ height 2
85
+ fill '#557'
86
+ end
87
+ end
88
+
89
+ people_mark_r2 = rect_mark.from(people) do
90
+ enter do
91
+ x_start { scale(x_scale).from('enter') }
92
+ x_end { scale(x_scale).from('leave') }
93
+ y_start { scale(y_scale).from('label').offset(-1) }
94
+ height 4
95
+ fill '#e44'
96
+ end
97
+ end
98
+
99
+ vis = visualization.name('lifelines').width(400).height(100) do
100
+ data people, events
101
+ scales x_scale, y_scale
102
+ axes x_axis.scale('x')
103
+ marks events_mark_t, events_mark_r, people_mark_t, people_mark_r, people_mark_r2
104
+ end
105
+
106
+ puts vis.generate_spec(:pretty)