D3
OG
Old school D3 from simpler times
All examples
By author
By category
About
js418
Full window
Github gist
Correlation matrix for education attainment over genders
Built with
blockbuilder.org
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title>Correlation Matrix</title> <style> .node { stroke: #fff; stroke-width: 1.5px; } .link { fill: none; stroke: #000; stroke-width: 1.5px; opacity: 0.4; marker-end: url(#end-arrow); } </style> </head> <body> <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.16/d3.min.js"></script> <script> //These attributes could be derived from the data attributes = ["All","Males","Females",]; attributeMatrix = []; attributes.forEach(function (a, x) { attributes.forEach(function (b, y) { //create an n-by-n matrix based on pairs of attributes attributeMatrix.push({a: a, b: b, x: x, y: y}) }) }) colors = d3.scale.category10(); d3.csv("year school_races.csv", small_scatterplots); d3.select("body").append("svg").attr("height", 1000).attr("width", 1000); function small_scatterplots(data) { //d3.csv pulls in data as strings so they need to be formatted as numbers data.forEach(function (d) { attributes.forEach(function (att) { d[att] = parseFloat(d[att]) }) }) //create scales dynamically for each attribute's extent scale = {}; attributes.forEach(function (att) { scale[att] = d3.scale.linear(); attExtent = d3.extent(data, function (d) {return d[att]}); scale[att].domain(attExtent).range([5,245]); }) //bind the matrix array to a grid of g elements d3.select("svg") .selectAll("g") .data(attributeMatrix) .enter() .append("g") .attr("transform", function (d) {return "translate(" + (d.x * 250) + "," + (d.y * 250) + ")" }); d3.selectAll("g") .each(function (matrix, i) { //index i is only used for coloring //background/border d3.select(this).append("rect").style("fill", "white").style("stroke", "black").style("stroke-width", 1) .attr("height", 250) .attr("width", 250); //label d3.select(this).append("text") .attr("x", 125) .style("text-anchor", "middle") .attr("y", 15) .attr("font-size", 15) .text(matrix.a + " vs " + matrix.b); //scatterplot points d3.select(this).selectAll("circle") .data(data) .enter() .append("circle") .attr("r", 2) .style("fill", colors(i)) .attr("cx", function (d) {return scale[matrix.a](d[matrix.a])}) .attr("cy", function (d) {return 245 - scale[matrix.b](d[matrix.b])}) }) } </script> </body> </html>
https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.16/d3.min.js