/* requires D3 + https://github.com/Caged/d3-tip */ d3.scatterplot = function() { function scatterplot(selection) { selection.each(function(d, i) { //options var data = (typeof(data) === "function" ? data(d) : d.data), margin = (typeof(margin) === "function" ? margin(d) : d.margin), axes = (typeof(axes) === "function" ? axes(d) : d.axes), minmax = (typeof(minmax) === "function" ? minmax(d) : d.minmax), size = (typeof(size) === "function" ? size(d) : d.size), colors = (typeof(colors) === "function" ? colors(d) : d.colors) // chart sizes var width = size['width'] - margin.left - margin.right, height = size['height'] - margin.top - margin.bottom; //scales var xScale = d3.scale.linear() .domain([minmax['x']['min'], minmax['x']['max']]) .range([margin.left, margin.left+width]) var yScale = d3.scale.linear() .domain([minmax['y']['min'], minmax['y']['max']]) .range([margin.top + height, margin.top]) var rScale = d3.scale.linear() .domain([minmax['r']['min'],minmax['r']['max']]) .range([minmax['rrange']['min'],minmax['rrange']['max']]); var element = d3.select(this); if (d.i != d.j) { //axes var xAxis = d3.svg.axis() .scale(xScale) .orient("bottom"); //.ticks(5); //.tickSize(16, 0); var yAxis = d3.svg.axis() .scale(yScale) .orient("left"); //.ticks(5); //Create X axis /*element.append("g") .attr("class", "axis x-axis") .attr("transform", "translate("+margin.left+"," + margin.top + ")") .call(xAxis); //Create Y axis element.append("g") .attr("class", "axis y-axis") .attr("transform", "translate(" + width + ",0)") .call(yAxis);*/ element.append("rect") .attr("class", "frame") .attr("x", xScale(0)) .attr("y", yScale(1)) .attr("width", xScale(1) - xScale(0)) .attr("height", yScale(0) - yScale(1)); element.append("rect") .attr("x", xScale(0)) .attr("y", yScale(1)) .attr("width", xScale(0.33) - xScale(0)) .attr("height", yScale(0) - yScale(1)) .attr("fill-opacity", 0.5) .attr("fill",colors.x); element.append("rect") .attr("x", xScale(0)) .attr("y", yScale(0.33)) .attr("width", xScale(1) - xScale(0)) .attr("height", yScale(0) - yScale(0.33)) .attr("fill-opacity", 0.5) .attr('fill',colors.y); element.selectAll("circle") .data(data) .enter() .append("circle") .attr("cx", function(d) { return xScale(d.x); }) .attr("cy", function(d) { return yScale(d.y); }) .attr("r", function(d) { if (typeof(d.r) !== 'undefined') return rScale(d.r); else return 1; }) .attr("class", function(d) { if (typeof(d['class'] != 'undefined')) return d['class']; else return 'circle'; }) //.on('mouseover', tip.show) //.on('mouseout', tip.hide); } else { element.append("text") .attr("x",xScale(0.2)) .attr("y",yScale(0.6)) .attr("dy","1em") .text(d.name.x); } //axis labels /*element.append("text") .attr("class", "x-label label") .attr("text-anchor", "end") .attr("x", width) .attr("y", height-5) .text(axes['labels']['x']); element.append("text") .attr("class", "y label") .attr("text-anchor", "end") .attr("y", 5) .attr("x", 0) .attr("dy", ".75em") .attr("transform", "rotate(-90)") .text(axes['labels']['y']);*/ }); } scatterplot.data = function(value) { if (!arguments.length) return value; data = value; return scatterplot; }; scatterplot.margin = function(value) { if (!arguments.length) return value; margin = value; return scatterplot; }; scatterplot.axes = function(value) { if (!arguments.length) return value; axes = value; return scatterplot; }; scatterplot.minmax = function(value) { if (!arguments.length) return value; minmax = value; return scatterplot; }; scatterplot.size = function(value) { if (!arguments.length) return value; size = value; return scatterplot; }; return scatterplot; }