nyaplot 0.1.6 → 0.2.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ module Nyaplot
2
+ class Position2D
3
+ include Nyaplot::Base
4
+ type :position2d
5
+ required_args :x, :y
6
+ end
7
+ end
@@ -0,0 +1,19 @@
1
+ module Nyaplot
2
+ class RowScale
3
+ include Nyaplot::Base
4
+ type :row_scale
5
+ required_args :scale, :column
6
+ end
7
+
8
+ class DataFrameScale
9
+ include Nyaplot::Base
10
+ type :df_scale
11
+ required_args :data, :column, :range
12
+ end
13
+
14
+ class Scale
15
+ include Nyaplot::Base
16
+ type :scale
17
+ required_args :domain, :range, :type
18
+ end
19
+ end
@@ -0,0 +1,83 @@
1
+ module Nyaplot
2
+ module Sheet
3
+ # Root class for glyphs
4
+ class Context
5
+ include Nyaplot::Base
6
+ type :context2d
7
+ required_args :glyphs
8
+ optional_args :width, :height
9
+
10
+ def add_glyph(*glyph)
11
+ glyphs([]) if glyphs.nil?
12
+
13
+ glyph.each{|g|
14
+ glyph.push(g.child) if g.respond_to? :child
15
+ }
16
+
17
+ glyphs.concat(glyph)
18
+ add_dependency(*glyph)
19
+
20
+ class << glyphs
21
+ def to_json(*args)
22
+ self.map{|obj| obj.uuid}.to_json
23
+ end
24
+ end
25
+ end
26
+
27
+ def range(method_name)
28
+ glyphs.reduce([Float::INFINITY, -Float::INFINITY]) do |memo, g|
29
+ if (r = g.send(method_name)).length != 2 || r.any? {|val| !(val.is_a?(Numeric))}
30
+ memo.delete(Float::INFINITY)
31
+ memo.delete(-Float::INFINITY)
32
+ memo.concat(r.to_a).uniq
33
+ else
34
+ min, max = r
35
+ memo[0] = [min, memo[0]].min
36
+ memo[1] = [max, memo[1]].max
37
+ memo
38
+ end
39
+ end
40
+ end
41
+
42
+ def xscale(range)
43
+ r = range(:range_x)
44
+ s = Scale.new(domain: r, range: range)
45
+ s.type(r.all? {|v| v.is_a? Numeric} ? :linear : :ordinal)
46
+ s
47
+ end
48
+
49
+ def yscale(range)
50
+ r = range(:range_y)
51
+ s = Scale.new(domain: r, range: range)
52
+ s.type(r.all? {|v| v.is_a? Numeric} ? :linear : :ordinal)
53
+ s
54
+ end
55
+
56
+ def position(pos)
57
+ @dependency.each do |g|
58
+ g.position(pos)
59
+ end
60
+ end
61
+
62
+ alias :add :add_glyph
63
+ end
64
+
65
+ class Axis
66
+ include Nyaplot::Base
67
+ type :axis2d
68
+ required_args :xscale, :yscale, :width, :height
69
+ optional_args :margin, :stroke_color, :stroke_width, :grid
70
+
71
+ def before_to_json
72
+ raise "width and height should be specified" if [width, height].any? {|a| a.nil?}
73
+ end
74
+ end
75
+
76
+ class Background
77
+ include Nyaplot::Base
78
+ type :background2d
79
+ required_args :width, :height
80
+ optional_args :bg_color, :stroke_width, :stroke_color
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,29 @@
1
+ module Nyaplot
2
+ module Simple
3
+ class DefaultStage < Stage2D
4
+ def initialize(width=500, height=500)
5
+ @width = width; @height = height
6
+ @background = Nyaplot::Sheet::Background.new
7
+ @context = Nyaplot::Sheet::Context.new
8
+ @axis = Nyaplot::Sheet::Axis.new
9
+ super(background, context, axis)
10
+ end
11
+
12
+ def adjust_size
13
+ [@background, @context, @axis].each do |sheet|
14
+ sheet.width
15
+ sheet.height
16
+ end
17
+ end
18
+
19
+ def adjust_margin
20
+ end
21
+
22
+ def before_to_json
23
+
24
+ adjust_size
25
+ adjust_margin
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,56 @@
1
+ module Nyaplot
2
+ # the wrapper class for stage2d of Nyaplotjs
3
+ # (https://github.com/domitry/Nyaplotjs/blob/v2/src/parser/stage2d.js)
4
+ #
5
+ class Stage2D
6
+ include Nyaplot::Base
7
+ type :stage2d
8
+ required_args :sheets
9
+ optional_args :margin, :width, :height
10
+ attr_accessor :background, :context, :axis
11
+
12
+ def initialize(*args)
13
+ super()
14
+ attr(width: 500, height: 400)
15
+ @background = Nyaplot::Sheet::Background.new
16
+ @context = Nyaplot::Sheet::Context.new
17
+ @axis = Nyaplot::Sheet::Axis.new
18
+ add_sheet(@background, @axis, @context)
19
+ end
20
+
21
+ def add_sheet(*given)
22
+ sheets([]) if sheets.nil?
23
+ sheets.concat(given.map{|obj| obj.uuid})
24
+ add_dependency(*given)
25
+ end
26
+
27
+ def adjust_size(width, height)
28
+ [[:width, width], [:height, height]].each do |val|
29
+ name, base = val
30
+ if @axis.send(name).nil?
31
+ @axis.send(name, (val = @background.send(name)).nil? ? base : val)
32
+ end
33
+ @background.send(name, @axis.send(name)) if @background.send(name).nil?
34
+ end
35
+ end
36
+
37
+ def adjust_margin
38
+ end
39
+
40
+ def resolve_dependency
41
+ child_width, child_height = [width*0.9, height*0.9]
42
+
43
+ adjust_size(child_width, child_height)
44
+ adjust_margin
45
+
46
+ x_pad, y_pad = [child_width*0.05, child_height*0.05]
47
+ xscale = @context.xscale([x_pad, child_width - x_pad])
48
+ yscale = @context.yscale([child_height - y_pad, y_pad])
49
+
50
+ pos = Position2D.new(x: xscale, y: yscale)
51
+
52
+ @context.position(pos)
53
+ @axis.xscale(xscale).yscale(yscale)
54
+ end
55
+ end
56
+ end
@@ -20,7 +20,7 @@ end
20
20
 
21
21
  var script = d3.select("head")
22
22
  .append("script")
23
- .attr("src", "http://cdn.rawgit.com/domitry/Nyaplotjs/master/release/nyaplot.js")
23
+ .attr("src", "http://rawgit.com/domitry/Nyaplotjs/v2/release/nyaplot.js")
24
24
  .attr("async", true);
25
25
 
26
26
  script[0][0].onload = script[0][0].onreadystatechange = function(){
@@ -0,0 +1,77 @@
1
+ (function(){
2
+ if(window.IPython !== undefined){
3
+ var comm_global = null;
4
+
5
+ var callback = function(uuid, ranges){
6
+ comm_global.send({
7
+ type: "selected",
8
+ stage_uuid: uuid,
9
+ range: ranges.x
10
+ });
11
+ };
12
+
13
+ window.Nyaplot.sheet_manager.register_sheet(
14
+ "interactive_layer",
15
+ ["parent", "scalex", "scaley", "stage_uuid"],
16
+ {
17
+ opacity: 0.125,
18
+ color: 'gray'
19
+ },
20
+ function(parent, scalex, scaley, stage_uuid, options){
21
+ var brushed = function(){
22
+ var ranges = {
23
+ x: (brush.empty() ? scalex.domain() : brush.extent()),
24
+ y: scaley.domain()
25
+ };
26
+ callback(stage_uuid, ranges);
27
+ };
28
+
29
+ var brush = d3.svg.brush()
30
+ .x(scalex)
31
+ .on("brushend", brushed);
32
+
33
+ var model = parent.append("g");
34
+ console.log(scaley);
35
+ var height = d3.max(scaley.range()) - d3.min(scaley.range());
36
+ var y = d3.min(scaley.range());
37
+
38
+ parent.call(brush)
39
+ .selectAll("rect")
40
+ .attr("y", y)
41
+ .attr("height", height)
42
+ .style({
43
+ "fill-opacity": options.opacity,
44
+ "fill": options.color,
45
+ "shape-rendering": "crispEdges"
46
+ });
47
+ }
48
+ );
49
+
50
+ window.IPython.notebook.kernel.comm_manager.register_target("nyaplot_interactive", function(comm, msg){
51
+ comm.on_msg(function(msg_){
52
+ console.log("msg has come.", msg_);
53
+ var msg = msg_.content.data;
54
+
55
+ switch(msg.type){
56
+ case "hello":
57
+ comm_global = comm;
58
+ break;
59
+ case "update":
60
+ /*
61
+ msg: {
62
+ type: "update",
63
+ model: model
64
+ }
65
+ */
66
+ console.log("update");
67
+ var model = JSON.parse(msg.model);
68
+ window.Nyaplot.core.parse(model);
69
+ break;
70
+ default:
71
+ console.log("error", msg);
72
+ break;
73
+ }
74
+ });
75
+ });
76
+ }
77
+ })();
@@ -2,15 +2,8 @@
2
2
  <script>
3
3
  (function(){
4
4
  var render = function(){
5
- var model = <%= model %>
6
- var id_name = '#vis-<%= id %>';
7
- Nyaplot.core.parse(model, id_name);
8
-
9
- require(['downloadable'], function(downloadable){
10
- var svg = d3.select(id_name).select("svg");
11
- if(!svg.empty())
12
- svg.call(downloadable().filename('fig'));
13
- });
5
+ var model = <%= model %>;
6
+ Nyaplot.core.parse(model);
14
7
  };
15
8
  if(window['Nyaplot']==undefined){
16
9
  window.addEventListener('load_nyaplot', render, false);
@@ -1,3 +1,3 @@
1
1
  module Nyaplot
2
- VERSION = "0.1.6"
2
+ VERSION = "0.2.0.rc1"
3
3
  end
@@ -1,6 +1,6 @@
1
1
  module Nyaplot
2
2
  add_extension("Elegans")
3
3
  add_dependency("THREE","http://cdnjs.cloudflare.com/ajax/libs/three.js/r66/three.min")
4
- add_dependency("Elegans","https://cdn.rawgit.com/domitry/elegans/d81a728f62edaeeb67261516a272438fb39fa80a/release/elegans")
4
+ add_dependency("Elegans","http://cdn.rawgit.com/domitry/elegans/nyaplot-extension/release/elegans")
5
5
  init_iruby if defined? IRuby
6
6
  end
data/nyaplot.gemspec CHANGED
@@ -51,33 +51,8 @@ EOF
51
51
  spec.required_ruby_version = ">= 2.0"
52
52
 
53
53
  spec.add_development_dependency "bundler", "~> 1.5"
54
+ spec.add_runtime_dependency "mikon", "~> 0.1.2.rc1"
54
55
  spec.add_development_dependency "rake"
55
56
  spec.add_development_dependency "rspec"
56
57
  spec.add_development_dependency "pry"
57
-
58
- root_path = File.expand_path(File.dirname(__FILE__))
59
-
60
- # get an array of submodule dirs by executing 'pwd' inside each submodule
61
- `git submodule --quiet foreach pwd`.split($\).each do |submodule_path|
62
- # for each submodule, change working directory to that submodule
63
- Dir.chdir(submodule_path) do
64
- # issue git ls-files in submodule's directory
65
- submodule_files = `git ls-files`.split($\)
66
-
67
- # prepend the submodule path to create absolute file paths
68
- submodule_files_fullpaths = submodule_files.map do |filename|
69
- "#{submodule_path}/#{filename}"
70
- end
71
-
72
- # remove leading path parts to get paths relative to the gem's root dir
73
- # (this assumes, that the gemspec resides in the gem's root dir)
74
- submodule_files_paths = submodule_files_fullpaths.map do |filename|
75
- str = filename.gsub root_path, ""
76
- str[1..(str.length-1)]
77
- end
78
-
79
- # add relative paths to gem.files
80
- spec.files += submodule_files_paths
81
- end
82
- end
83
58
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nyaplot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.2.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Naoki Nishida
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-16 00:00:00.000000000 Z
11
+ date: 2015-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.5'
27
+ - !ruby/object:Gem::Dependency
28
+ name: mikon
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.1.2.rc1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.1.2.rc1
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -98,6 +112,7 @@ files:
98
112
  - examples/notebook/Mapnya.ipynb
99
113
  - examples/notebook/Mapnya2.ipynb
100
114
  - examples/notebook/Mapnya3.ipynb
115
+ - examples/notebook/Nyaplotv2.ipynb
101
116
  - examples/notebook/data/11-1-result0.6.csv
102
117
  - examples/notebook/data/UNdata_Export_20140813_215958400.csv
103
118
  - examples/notebook/data/circular/category.csv
@@ -658,9 +673,6 @@ files:
658
673
  - lib/mapnya/datasets/countries/dist/countries.xml
659
674
  - lib/mapnya/datasets/countries/index.js
660
675
  - lib/mapnya/datasets/countries/package.json
661
- - lib/mapnya/datasets/geo-boundaries-world-110m/README.md
662
- - lib/mapnya/datasets/geo-boundaries-world-110m/countries.geojson
663
- - lib/mapnya/datasets/geo-boundaries-world-110m/datapackage.json
664
676
  - lib/mapnya/datasets/world.geo.json
665
677
  - lib/mapnya/js/.gitignore
666
678
  - lib/mapnya/js/Gruntfile.js
@@ -690,12 +702,18 @@ files:
690
702
  - lib/nyaplot/colorbrewer/colorbrewer.json
691
703
  - lib/nyaplot/core.rb
692
704
  - lib/nyaplot/data.rb
693
- - lib/nyaplot/database.rb
694
- - lib/nyaplot/diagram.rb
695
- - lib/nyaplot/frame.rb
705
+ - lib/nyaplot/glyph.rb
706
+ - lib/nyaplot/interactive.rb
696
707
  - lib/nyaplot/monkeys.rb
708
+ - lib/nyaplot/pane.rb
697
709
  - lib/nyaplot/plot.rb
710
+ - lib/nyaplot/position.rb
711
+ - lib/nyaplot/scale.rb
712
+ - lib/nyaplot/sheet.rb
713
+ - lib/nyaplot/simple/stage.rb
714
+ - lib/nyaplot/stage2d.rb
698
715
  - lib/nyaplot/templates/init.js.erb
716
+ - lib/nyaplot/templates/init_interactive.js
699
717
  - lib/nyaplot/templates/iruby.erb
700
718
  - lib/nyaplot/templates/static_html.erb
701
719
  - lib/nyaplot/version.rb
@@ -745,9 +763,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
745
763
  version: '2.0'
746
764
  required_rubygems_version: !ruby/object:Gem::Requirement
747
765
  requirements:
748
- - - ">="
766
+ - - ">"
749
767
  - !ruby/object:Gem::Version
750
- version: '0'
768
+ version: 1.3.1
751
769
  requirements: []
752
770
  rubyforge_project:
753
771
  rubygems_version: 2.2.2
@@ -771,3 +789,4 @@ test_files:
771
789
  - spec/nyaplot3d_spec.rb
772
790
  - spec/nyaplot_spec.rb
773
791
  - spec/spec_helper.rb
792
+ has_rdoc: