From 42187739fffa33cd2f0527ead51cb553b8ff258d Mon Sep 17 00:00:00 2001 From: mwasiluk <m.wasiluk89@gmail.com> Date: Thu, 23 Jun 2016 11:09:08 +0200 Subject: [PATCH] updated d3-scatterplot --- bower.json | 3 ++- bower_components/d3-scatterplot/.bower.json | 10 +++++----- bower_components/d3-scatterplot/README.md | 6 ++++++ bower_components/d3-scatterplot/demo/demo.js | 5 ++++- bower_components/d3-scatterplot/demo/index.html | 2 +- bower_components/d3-scatterplot/dist/d3-scatterplot.js | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------- bower_components/d3-scatterplot/dist/d3-scatterplot.min.js | 4 ++-- bower_components/d3-scatterplot/src/d3-scatterplot-utils.js | 42 +++++++++++++++++++++++++++++++----------- bower_components/d3-scatterplot/src/d3-scatterplot.js | 46 ++++++++++++++++++++++++++++++---------------- datalets/scatterplot-datalet/scatterplot-datalet.html | 12 +++--------- 10 files changed, 145 insertions(+), 74 deletions(-) diff --git a/bower.json b/bower.json index 049b53d..fe88b57 100755 --- a/bower.json +++ b/bower.json @@ -20,6 +20,7 @@ "iron-icon": "PolymerElements/iron-icon#~1.0.7", "iron-icons": "PolymerElements/iron-icons#~1.1.2", "paper-toast": "PolymerElements/paper-toast#~1.2.1", - "d3-scatterplot-matrix": "^0.1.0" + "d3-scatterplot-matrix": "^0.1.0", + "d3-scatterplot": "^1.1.0" } } diff --git a/bower_components/d3-scatterplot/.bower.json b/bower_components/d3-scatterplot/.bower.json index 975e3a1..6f72276 100644 --- a/bower_components/d3-scatterplot/.bower.json +++ b/bower_components/d3-scatterplot/.bower.json @@ -21,14 +21,14 @@ "dependencies": { "d3": "^3.5.17" }, - "version": "1.1.0", - "_release": "1.1.0", + "version": "1.2.0", + "_release": "1.2.0", "_resolution": { "type": "version", - "tag": "1.1.0", - "commit": "9b30b60eb35b60c7c8c83cd86107a27cae0b9db9" + "tag": "1.2.0", + "commit": "0aaed8cda9972abba45aa474e2167663bee29098" }, "_source": "https://github.com/mwasiluk/d3-scatterplot.git", - "_target": "^1.0.0", + "_target": "^1.1.0", "_originalSource": "d3-scatterplot" } \ No newline at end of file diff --git a/bower_components/d3-scatterplot/README.md b/bower_components/d3-scatterplot/README.md index 9d4d741..a8644d0 100644 --- a/bower_components/d3-scatterplot/README.md +++ b/bower_components/d3-scatterplot/README.md @@ -1,5 +1,11 @@ # d3-scatterplot +You can install this package through `Bower` : + + bower install d3-scatterplot --save + + +<br/><br/> <img src="http://routetopa.eu/wp-content/uploads/2015/06/eu-flag.jpg" width="22"> This project has received funding from the European Union’s Horizon 2020 research and innovation programme under grant agreement No 645860. diff --git a/bower_components/d3-scatterplot/demo/demo.js b/bower_components/d3-scatterplot/demo/demo.js index 08dfb6c..9a9d57b 100644 --- a/bower_components/d3-scatterplot/demo/demo.js +++ b/bower_components/d3-scatterplot/demo/demo.js @@ -3,6 +3,9 @@ var conf = { // height: 500, dot:{ // color: 'red' + }, + x:{ + // scale: "log" } }; var data = [ @@ -17,4 +20,4 @@ var data = [ ]; var plot = new D3ScatterPlot("#scatterplot", data, conf); -plot.init(); \ No newline at end of file + diff --git a/bower_components/d3-scatterplot/demo/index.html b/bower_components/d3-scatterplot/demo/index.html index e8bafbb..b04c02c 100644 --- a/bower_components/d3-scatterplot/demo/index.html +++ b/bower_components/d3-scatterplot/demo/index.html @@ -8,7 +8,7 @@ <body> <h1>D3 scatterplot demo</h1> -<div id="scatterplot" style="width:auto; min-height:500px;"></div> +<div id="scatterplot" style=" width: 100%; height: 600px;"></div> <script src="../bower_components/d3/d3.min.js" charset="utf-8"></script> <script src="../dist/d3-scatterplot.js" charset="utf-8"></script> diff --git a/bower_components/d3-scatterplot/dist/d3-scatterplot.js b/bower_components/d3-scatterplot/dist/d3-scatterplot.js index df62d7f..249a47e 100644 --- a/bower_components/d3-scatterplot/dist/d3-scatterplot.js +++ b/bower_components/d3-scatterplot/dist/d3-scatterplot.js @@ -1,23 +1,34 @@ function D3ScatterPlotUtils(){} // usage example deepExtend({}, objA, objB); => should work similar to $.extend(true, {}, objA, objB); -D3ScatterPlotUtils.prototype.deepExtend = function(out) { //TODO consider using jquery / lo-dash / underscore / ECMA6 ; fallbacks? +D3ScatterPlotUtils.prototype.deepExtend = function (out) { - var utils =this; + var utils = this; + var emptyOut = {}; + + + if (!out && arguments.length > 1 && Array.isArray(arguments[1])) { + out = []; + } out = out || {}; for (var i = 1; i < arguments.length; i++) { - var obj = arguments[i]; - - if (!obj) + var source = arguments[i]; + if (!source) continue; - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - if (typeof obj[key] === 'object') - out[key] = utils.deepExtend(out[key], obj[key]); - else - out[key] = obj[key]; + for (var key in source) { + if (!source.hasOwnProperty(key)) { + continue; + } + var isArray = Array.isArray(out[key]); + var isObject = utils.isObject(out[key]); + var srcObj = utils.isObject(source[key]); + + if (isObject && !isArray && srcObj) { + utils.deepExtend(out[key], source[key]); + } else { + out[key] = source[key]; } } } @@ -25,7 +36,15 @@ D3ScatterPlotUtils.prototype.deepExtend = function(out) { //TODO consider using return out; }; - +D3ScatterPlotUtils.prototype.isObject = function(a) { + return a !== null && typeof a === 'object'; +}; +D3ScatterPlotUtils.prototype.isNumber = function(a) { + return !isNaN(a) && typeof a === 'number'; +}; +D3ScatterPlotUtils.prototype.isFunction = function(a) { + return typeof a === 'function'; +}; function D3ScatterPlot(placeholderSelector, data, config){ this.utils = new D3ScatterPlotUtils(); this.placeholderSelector = placeholderSelector; @@ -42,12 +61,14 @@ function D3ScatterPlot(placeholderSelector, data, config){ x:{// X axis config label: 'X', // axis label value: function(d) { return d[0] }, // x value accessor - orient: "bottom" + orient: "bottom", + scale: "linear" }, y:{// Y axis config label: 'Y', // axis label value: function(d) { return d[1] }, // y value accessor - orient: "left" + orient: "left", + scale: "linear" }, dot:{ radius: 2, @@ -64,6 +85,8 @@ function D3ScatterPlot(placeholderSelector, data, config){ this.setConfig(config); } + this.init(); + } D3ScatterPlot.prototype.setData = function (data){ @@ -138,7 +161,7 @@ D3ScatterPlot.prototype.setupX = function (){ * axis - sets up axis */ x.value = conf.value; - x.scale = d3.scale.linear().range([0, plot.width]); + x.scale = d3.scale[conf.scale]().range([0, plot.width]); x.map = function(d) { return x.scale(x.value(d));}; x.axis = d3.svg.axis().scale(x.scale).orient(conf.orient); var data = this.data; @@ -160,7 +183,7 @@ D3ScatterPlot.prototype.setupY = function (){ * axis - sets up axis */ y.value = conf.value; - y.scale = d3.scale.linear().range([plot.height, 0]); + y.scale = d3.scale[conf.scale]().range([plot.height, 0]); y.map = function(d) { return y.scale(y.value(d));}; y.axis = d3.svg.axis().scale(y.scale).orient(conf.orient); @@ -169,10 +192,10 @@ D3ScatterPlot.prototype.setupY = function (){ plot.y.scale.domain([d3.min(data, plot.y.value)-1, d3.max(data, plot.y.value)+1]); }; -D3ScatterPlot.prototype.drawPlot = function (){ +D3ScatterPlot.prototype.draw = function (){ this.drawAxisX(); this.drawAxisY(); - this.drawDots(); + this.update(); }; D3ScatterPlot.prototype.drawAxisX = function (){ var self = this; @@ -206,34 +229,44 @@ D3ScatterPlot.prototype.drawAxisY = function (){ }; -D3ScatterPlot.prototype.drawDots = function (){ +D3ScatterPlot.prototype.update = function (){ var self = this; var plot = self.plot; var data = this.data; var dots = self.svgG.selectAll(".mw-dot") - .data(data) - .enter().append("circle") - .attr("class", "mw-dot") - .attr("r", self.config.dot.radius) + .data(data); + + dots.enter().append("circle") + .attr("class", "mw-dot"); + + + dots.attr("r", self.config.dot.radius) .attr("cx", plot.x.map) .attr("cy", plot.y.map); if(plot.dot.color){ dots.style("fill", plot.dot.color) } + dots.exit().remove(); }; D3ScatterPlot.prototype.initSvg = function (){ var self = this; var config = this.config; - - - + var width = self.plot.width+ config.margin.left + config.margin.right; var height = self.plot.height+ config.margin.top + config.margin.bottom; var aspect = width / height; - self.svg = d3.select(self.placeholderSelector).append("svg") + + self.svg = d3.select(self.placeholderSelector).select("svg"); + if(!self.svg.empty()){ + self.svg.remove(); + + } + self.svg = d3.select(self.placeholderSelector).append("svg"); + + self.svg .attr("width", width) .attr("height", height) .attr("viewBox", "0 0 "+" "+width+" "+height) @@ -255,7 +288,7 @@ D3ScatterPlot.prototype.init = function (){ var self = this; self.initPlot(); self.initSvg(); - self.drawPlot(); + self.draw(); }; diff --git a/bower_components/d3-scatterplot/dist/d3-scatterplot.min.js b/bower_components/d3-scatterplot/dist/d3-scatterplot.min.js index bd591cc..ad58efb 100644 --- a/bower_components/d3-scatterplot/dist/d3-scatterplot.min.js +++ b/bower_components/d3-scatterplot/dist/d3-scatterplot.min.js @@ -1,2 +1,2 @@ -function D3ScatterPlotUtils(){}D3ScatterPlotUtils.prototype.deepExtend=function(t){var e=this;t=t||{};for(var r=1;r<arguments.length;r++){var o=arguments[r];if(o)for(var n in o)o.hasOwnProperty(n)&&("object"==typeof o[n]?t[n]=e.deepExtend(t[n],o[n]):t[n]=o[n])}return t}; -function D3ScatterPlot(t,o,e){this.utils=new D3ScatterPlotUtils,this.placeholderSelector=t,this.svg=null,this.defaultConfig={width:0,height:0,margin:{left:50,right:30,top:30,bottom:50},x:{label:"X",value:function(t){return t[0]},orient:"bottom"},y:{label:"Y",value:function(t){return t[1]},orient:"left"},dot:{radius:2,color:function(t){return t[0]*t[1]},d3ColorCategory:"category10"}},o&&this.setData(o),e&&this.setConfig(e)}D3ScatterPlot.prototype.setData=function(t){return this.data=t,this},D3ScatterPlot.prototype.setConfig=function(t){return this.config=this.utils.deepExtend({},this.defaultConfig,t),this},D3ScatterPlot.prototype.initPlot=function(){var t=this,o=this.config.margin,e=this.config;this.plot={x:{},y:{},dot:{color:null}};var a=e.width,i=d3.select(this.placeholderSelector).node();a||(a=i.getBoundingClientRect().width);var r=e.height;r||(r=i.getBoundingClientRect().height),this.plot.width=a-o.left-o.right,this.plot.height=r-o.top-o.bottom,this.setupX(),this.setupY(),e.dot.d3ColorCategory&&(this.plot.dot.colorCategory=d3.scale[e.dot.d3ColorCategory]());var l=e.dot.color;return l&&(this.plot.dot.colorValue=l,"string"==typeof l||l instanceof String?this.plot.dot.color=l:this.plot.dot.colorCategory&&(this.plot.dot.color=function(o){return t.plot.dot.colorCategory(t.plot.dot.colorValue(o))})),this},D3ScatterPlot.prototype.setupX=function(){var t=this.plot,o=t.x,e=this.config.x;o.value=e.value,o.scale=d3.scale.linear().range([0,t.width]),o.map=function(t){return o.scale(o.value(t))},o.axis=d3.svg.axis().scale(o.scale).orient(e.orient);var a=this.data;t.x.scale.domain([d3.min(a,t.x.value)-1,d3.max(a,t.x.value)+1])},D3ScatterPlot.prototype.setupY=function(){var t=this.plot,o=t.y,e=this.config.y;o.value=e.value,o.scale=d3.scale.linear().range([t.height,0]),o.map=function(t){return o.scale(o.value(t))},o.axis=d3.svg.axis().scale(o.scale).orient(e.orient);var a=this.data;t.y.scale.domain([d3.min(a,t.y.value)-1,d3.max(a,t.y.value)+1])},D3ScatterPlot.prototype.drawPlot=function(){this.drawAxisX(),this.drawAxisY(),this.drawDots()},D3ScatterPlot.prototype.drawAxisX=function(){var t=this,o=t.plot,e=this.config.x;t.svgG.append("g").attr("class","mw-axis mw-axis-x").attr("transform","translate(0,"+o.height+")").call(o.x.axis).append("text").attr("class","mw-label").attr("transform","translate("+o.width/2+","+t.config.margin.bottom+")").attr("dy","-1em").style("text-anchor","middle").text(e.label)},D3ScatterPlot.prototype.drawAxisY=function(){var t=this,o=t.plot,e=this.config.y;t.svgG.append("g").attr("class","mw-axis mw-axis-y").call(o.y.axis).append("text").attr("class","mw-label").attr("transform","translate("+-t.config.margin.left+","+o.height/2+")rotate(-90)").attr("dy","1em").style("text-anchor","middle").text(e.label)},D3ScatterPlot.prototype.drawDots=function(){var t=this,o=t.plot,e=this.data,a=t.svgG.selectAll(".mw-dot").data(e).enter().append("circle").attr("class","mw-dot").attr("r",t.config.dot.radius).attr("cx",o.x.map).attr("cy",o.y.map);o.dot.color&&a.style("fill",o.dot.color)},D3ScatterPlot.prototype.initSvg=function(){var t=this,o=this.config,e=t.plot.width+o.margin.left+o.margin.right,a=t.plot.height+o.margin.top+o.margin.bottom;t.svg=d3.select(t.placeholderSelector).append("svg").attr("width",e).attr("height",a).attr("viewBox","0 0 "+e+" "+a).attr("preserveAspectRatio","xMidYMid meet").attr("class","mw-d3-scatterplot"),t.svgG=t.svg.append("g").attr("transform","translate("+o.margin.left+","+o.margin.top+")"),o.width&&!o.height||d3.select(window).on("resize",function(){})},D3ScatterPlot.prototype.init=function(){var t=this;t.initPlot(),t.initSvg(),t.drawPlot()}; \ No newline at end of file +function D3ScatterPlotUtils(){}D3ScatterPlotUtils.prototype.deepExtend=function(t){var r=this;!t&&arguments.length>1&&Array.isArray(arguments[1])&&(t=[]),t=t||{};for(var e=1;e<arguments.length;e++){var o=arguments[e];if(o)for(var n in o)if(o.hasOwnProperty(n)){var i=Array.isArray(t[n]),a=r.isObject(t[n]),c=r.isObject(o[n]);a&&!i&&c?r.deepExtend(t[n],o[n]):t[n]=o[n]}}return t},D3ScatterPlotUtils.prototype.isObject=function(t){return null!==t&&"object"==typeof t},D3ScatterPlotUtils.prototype.isNumber=function(t){return!isNaN(t)&&"number"==typeof t},D3ScatterPlotUtils.prototype.isFunction=function(t){return"function"==typeof t}; +function D3ScatterPlot(t,e,o){this.utils=new D3ScatterPlotUtils,this.placeholderSelector=t,this.svg=null,this.defaultConfig={width:0,height:0,margin:{left:50,right:30,top:30,bottom:50},x:{label:"X",value:function(t){return t[0]},orient:"bottom",scale:"linear"},y:{label:"Y",value:function(t){return t[1]},orient:"left",scale:"linear"},dot:{radius:2,color:function(t){return t[0]*t[1]},d3ColorCategory:"category10"}},e&&this.setData(e),o&&this.setConfig(o),this.init()}D3ScatterPlot.prototype.setData=function(t){return this.data=t,this},D3ScatterPlot.prototype.setConfig=function(t){return this.config=this.utils.deepExtend({},this.defaultConfig,t),this},D3ScatterPlot.prototype.initPlot=function(){var t=this,e=this.config.margin,o=this.config;this.plot={x:{},y:{},dot:{color:null}};var a=o.width,i=d3.select(this.placeholderSelector).node();a||(a=i.getBoundingClientRect().width);var r=o.height;r||(r=i.getBoundingClientRect().height),this.plot.width=a-e.left-e.right,this.plot.height=r-e.top-e.bottom,this.setupX(),this.setupY(),o.dot.d3ColorCategory&&(this.plot.dot.colorCategory=d3.scale[o.dot.d3ColorCategory]());var l=o.dot.color;return l&&(this.plot.dot.colorValue=l,"string"==typeof l||l instanceof String?this.plot.dot.color=l:this.plot.dot.colorCategory&&(this.plot.dot.color=function(e){return t.plot.dot.colorCategory(t.plot.dot.colorValue(e))})),this},D3ScatterPlot.prototype.setupX=function(){var t=this.plot,e=t.x,o=this.config.x;e.value=o.value,e.scale=d3.scale[o.scale]().range([0,t.width]),e.map=function(t){return e.scale(e.value(t))},e.axis=d3.svg.axis().scale(e.scale).orient(o.orient);var a=this.data;t.x.scale.domain([d3.min(a,t.x.value)-1,d3.max(a,t.x.value)+1])},D3ScatterPlot.prototype.setupY=function(){var t=this.plot,e=t.y,o=this.config.y;e.value=o.value,e.scale=d3.scale[o.scale]().range([t.height,0]),e.map=function(t){return e.scale(e.value(t))},e.axis=d3.svg.axis().scale(e.scale).orient(o.orient);var a=this.data;t.y.scale.domain([d3.min(a,t.y.value)-1,d3.max(a,t.y.value)+1])},D3ScatterPlot.prototype.draw=function(){this.drawAxisX(),this.drawAxisY(),this.update()},D3ScatterPlot.prototype.drawAxisX=function(){var t=this,e=t.plot,o=this.config.x;t.svgG.append("g").attr("class","mw-axis mw-axis-x").attr("transform","translate(0,"+e.height+")").call(e.x.axis).append("text").attr("class","mw-label").attr("transform","translate("+e.width/2+","+t.config.margin.bottom+")").attr("dy","-1em").style("text-anchor","middle").text(o.label)},D3ScatterPlot.prototype.drawAxisY=function(){var t=this,e=t.plot,o=this.config.y;t.svgG.append("g").attr("class","mw-axis mw-axis-y").call(e.y.axis).append("text").attr("class","mw-label").attr("transform","translate("+-t.config.margin.left+","+e.height/2+")rotate(-90)").attr("dy","1em").style("text-anchor","middle").text(o.label)},D3ScatterPlot.prototype.update=function(){var t=this,e=t.plot,o=this.data,a=t.svgG.selectAll(".mw-dot").data(o);a.enter().append("circle").attr("class","mw-dot"),a.attr("r",t.config.dot.radius).attr("cx",e.x.map).attr("cy",e.y.map),e.dot.color&&a.style("fill",e.dot.color),a.exit().remove()},D3ScatterPlot.prototype.initSvg=function(){var t=this,e=this.config,o=t.plot.width+e.margin.left+e.margin.right,a=t.plot.height+e.margin.top+e.margin.bottom;t.svg=d3.select(t.placeholderSelector).select("svg"),t.svg.empty()||t.svg.remove(),t.svg=d3.select(t.placeholderSelector).append("svg"),t.svg.attr("width",o).attr("height",a).attr("viewBox","0 0 "+o+" "+a).attr("preserveAspectRatio","xMidYMid meet").attr("class","mw-d3-scatterplot"),t.svgG=t.svg.append("g").attr("transform","translate("+e.margin.left+","+e.margin.top+")"),e.width&&!e.height||d3.select(window).on("resize",function(){})},D3ScatterPlot.prototype.init=function(){var t=this;t.initPlot(),t.initSvg(),t.draw()}; \ No newline at end of file diff --git a/bower_components/d3-scatterplot/src/d3-scatterplot-utils.js b/bower_components/d3-scatterplot/src/d3-scatterplot-utils.js index 5779dc2..14347ad 100644 --- a/bower_components/d3-scatterplot/src/d3-scatterplot-utils.js +++ b/bower_components/d3-scatterplot/src/d3-scatterplot-utils.js @@ -1,23 +1,34 @@ function D3ScatterPlotUtils(){} // usage example deepExtend({}, objA, objB); => should work similar to $.extend(true, {}, objA, objB); -D3ScatterPlotUtils.prototype.deepExtend = function(out) { //TODO consider using jquery / lo-dash / underscore / ECMA6 ; fallbacks? +D3ScatterPlotUtils.prototype.deepExtend = function (out) { - var utils =this; + var utils = this; + var emptyOut = {}; + + + if (!out && arguments.length > 1 && Array.isArray(arguments[1])) { + out = []; + } out = out || {}; for (var i = 1; i < arguments.length; i++) { - var obj = arguments[i]; - - if (!obj) + var source = arguments[i]; + if (!source) continue; - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - if (typeof obj[key] === 'object') - out[key] = utils.deepExtend(out[key], obj[key]); - else - out[key] = obj[key]; + for (var key in source) { + if (!source.hasOwnProperty(key)) { + continue; + } + var isArray = Array.isArray(out[key]); + var isObject = utils.isObject(out[key]); + var srcObj = utils.isObject(source[key]); + + if (isObject && !isArray && srcObj) { + utils.deepExtend(out[key], source[key]); + } else { + out[key] = source[key]; } } } @@ -25,3 +36,12 @@ D3ScatterPlotUtils.prototype.deepExtend = function(out) { //TODO consider using return out; }; +D3ScatterPlotUtils.prototype.isObject = function(a) { + return a !== null && typeof a === 'object'; +}; +D3ScatterPlotUtils.prototype.isNumber = function(a) { + return !isNaN(a) && typeof a === 'number'; +}; +D3ScatterPlotUtils.prototype.isFunction = function(a) { + return typeof a === 'function'; +}; \ No newline at end of file diff --git a/bower_components/d3-scatterplot/src/d3-scatterplot.js b/bower_components/d3-scatterplot/src/d3-scatterplot.js index ad6e77f..4ee0b65 100644 --- a/bower_components/d3-scatterplot/src/d3-scatterplot.js +++ b/bower_components/d3-scatterplot/src/d3-scatterplot.js @@ -14,12 +14,14 @@ function D3ScatterPlot(placeholderSelector, data, config){ x:{// X axis config label: 'X', // axis label value: function(d) { return d[0] }, // x value accessor - orient: "bottom" + orient: "bottom", + scale: "linear" }, y:{// Y axis config label: 'Y', // axis label value: function(d) { return d[1] }, // y value accessor - orient: "left" + orient: "left", + scale: "linear" }, dot:{ radius: 2, @@ -36,6 +38,8 @@ function D3ScatterPlot(placeholderSelector, data, config){ this.setConfig(config); } + this.init(); + } D3ScatterPlot.prototype.setData = function (data){ @@ -110,7 +114,7 @@ D3ScatterPlot.prototype.setupX = function (){ * axis - sets up axis */ x.value = conf.value; - x.scale = d3.scale.linear().range([0, plot.width]); + x.scale = d3.scale[conf.scale]().range([0, plot.width]); x.map = function(d) { return x.scale(x.value(d));}; x.axis = d3.svg.axis().scale(x.scale).orient(conf.orient); var data = this.data; @@ -132,7 +136,7 @@ D3ScatterPlot.prototype.setupY = function (){ * axis - sets up axis */ y.value = conf.value; - y.scale = d3.scale.linear().range([plot.height, 0]); + y.scale = d3.scale[conf.scale]().range([plot.height, 0]); y.map = function(d) { return y.scale(y.value(d));}; y.axis = d3.svg.axis().scale(y.scale).orient(conf.orient); @@ -141,10 +145,10 @@ D3ScatterPlot.prototype.setupY = function (){ plot.y.scale.domain([d3.min(data, plot.y.value)-1, d3.max(data, plot.y.value)+1]); }; -D3ScatterPlot.prototype.drawPlot = function (){ +D3ScatterPlot.prototype.draw = function (){ this.drawAxisX(); this.drawAxisY(); - this.drawDots(); + this.update(); }; D3ScatterPlot.prototype.drawAxisX = function (){ var self = this; @@ -178,34 +182,44 @@ D3ScatterPlot.prototype.drawAxisY = function (){ }; -D3ScatterPlot.prototype.drawDots = function (){ +D3ScatterPlot.prototype.update = function (){ var self = this; var plot = self.plot; var data = this.data; var dots = self.svgG.selectAll(".mw-dot") - .data(data) - .enter().append("circle") - .attr("class", "mw-dot") - .attr("r", self.config.dot.radius) + .data(data); + + dots.enter().append("circle") + .attr("class", "mw-dot"); + + + dots.attr("r", self.config.dot.radius) .attr("cx", plot.x.map) .attr("cy", plot.y.map); if(plot.dot.color){ dots.style("fill", plot.dot.color) } + dots.exit().remove(); }; D3ScatterPlot.prototype.initSvg = function (){ var self = this; var config = this.config; - - - + var width = self.plot.width+ config.margin.left + config.margin.right; var height = self.plot.height+ config.margin.top + config.margin.bottom; var aspect = width / height; - self.svg = d3.select(self.placeholderSelector).append("svg") + + self.svg = d3.select(self.placeholderSelector).select("svg"); + if(!self.svg.empty()){ + self.svg.remove(); + + } + self.svg = d3.select(self.placeholderSelector).append("svg"); + + self.svg .attr("width", width) .attr("height", height) .attr("viewBox", "0 0 "+" "+width+" "+height) @@ -227,7 +241,7 @@ D3ScatterPlot.prototype.init = function (){ var self = this; self.initPlot(); self.initSvg(); - self.drawPlot(); + self.draw(); }; diff --git a/datalets/scatterplot-datalet/scatterplot-datalet.html b/datalets/scatterplot-datalet/scatterplot-datalet.html index 6470fd6..35b2a1d 100644 --- a/datalets/scatterplot-datalet/scatterplot-datalet.html +++ b/datalets/scatterplot-datalet/scatterplot-datalet.html @@ -24,18 +24,12 @@ presentData: function () { var self =this; - var scatterSeries = []; - var series = []; - var point = []; - + var data = []; for (var j = 0; j < this.data[0]["data"].length; j++) { point = [this.data[0].data[j], this.data[1].data[j]]; - series.push(point); + data.push(point); } - scatterSeries.push({data: series}); - - this.properties.series = scatterSeries; this._component.legend = false; var conf = { @@ -52,7 +46,7 @@ } }; - var plot = new D3ScatterPlot("#scatterplot-placeholder", this.properties.series[0].data, conf); + var plot = new D3ScatterPlot("#scatterplot-placeholder", data, conf); plot.init(); } }; -- libgit2 0.21.4