Built with blockbuilder.org
Working on a d3v3 project where a density plot might be helpful. There are other examples out there. I wanted to try with the fantastic simple-statistics.
| license: mit |
Built with blockbuilder.org
Working on a d3v3 project where a density plot might be helpful. There are other examples out there. I wanted to try with the fantastic simple-statistics.
| <!DOCTYPE html> | |
| <head> | |
| <meta charset="utf-8"> | |
| <script src="https://unpkg.com/simple-statistics@5.2.1/dist/simple-statistics.min.js"></script> | |
| <script src="https://d3js.org/d3.v3.min.js"></script> | |
| <style> | |
| body { margin:0;position:fixed;top:0;right:0;bottom:0;left:0; } | |
| </style> | |
| </head> | |
| <body> | |
| <script> | |
| var width = 960, height = 500 | |
| var svg = d3.select("body").append("svg") | |
| .attr("width", width) | |
| .attr("height", height) | |
| .append("g") | |
| .attr("transform", "translate(100,0)") | |
| // from http://bl.ocks.org/mbostock/4349187 | |
| // Sample from a normal distribution with mean 0, stddev 1. | |
| function normal() { | |
| var x = 0, | |
| y = 0, | |
| rds, c; | |
| do { | |
| x = Math.random() * 2 - 1; | |
| y = Math.random() * 2 - 1; | |
| rds = x * x + y * y; | |
| } while (rds == 0 || rds > 1); | |
| c = Math.sqrt(-2 * Math.log(rds) / rds); // Box-Muller transform | |
| return x * c; // throw away extra sample y * c | |
| } | |
| var data = [] | |
| for(var i = 0; i < 10000; i++) { | |
| data.push(normal()) | |
| } | |
| var kde = ss.kernelDensityEstimation(data) | |
| var breaks = ss.equalIntervalBreaks(data, 100) | |
| var sc_x = d3.scale.linear() | |
| .range([0, width - 100]) | |
| var sc_y = d3.scale.linear() | |
| .range([0, height]) | |
| .domain(d3.extent(breaks)) | |
| var path = svg.append("path") | |
| .attr("d", d3.svg.line().interpolate("basis")( | |
| breaks.map(function(d) { | |
| return [sc_x(kde(d)), sc_y(d)] | |
| }) | |
| )) | |
| .style("fill", "none") | |
| .style("stroke", "black") | |
| svg.append("g") | |
| .call(d3.svg.axis().orient("left").scale(sc_y)) | |
| .selectAll("line,path") | |
| .style("fill", "none") | |
| .style("stroke", "black") | |
| </script> | |
| </body> |