D3
OG
Old school D3 from simpler times
All examples
By author
By category
About
devgru
Full window
Github gist
Heatmap
<html> <body> <style> svg { width: 100%; height: 240px; } g text { font-size: 0.8em; text-anchor: middle; } g text.first { text-anchor: start; } g text.last { text-anchor: end; } </style> <script type='text/javascript' src='https://d3js.org/d3.v4.min.js'></script> <script> var url = "https://api.github.com/repos/mbostock/d3/stats/punch_card" var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'] var color = d3.scaleLinear() .range(['#FEFEFF', 'blue']) .interpolate(d3.interpolateHcl) d3.json(url, function (data) { color.domain(d3.extent(data, function (d) { return d[2] })) var body = d3.select('body') var svg = body.append('svg') var heatmap = svg .append('g') .attr('transform', 'translate(30,30)') var span = svg .append('text') .attr('y', 11.5 * 20) .attr('x', 30) var head = svg .append('g') .attr('transform', 'translate(30,22)') head .append('text') .classed('first', true) .text('midnight') head .append('text') .attr('x', 12 * 20) .text('noon') head .append('text') .classed('last', true) .attr('x', 24 * 20) .text('midnight') heatmap .selectAll('rect') .data(data) .enter() .append('rect') .attr('x', function (d) { return d[1] * 20 }) .attr('y', function (d) { return d[0] * 20 }) .attr('width', 20) .attr('height', 20) .style('fill', function (d) { return color(d[2]) }) .on('mouseover', function (d) { span.text(d[2] + ' commits between ' + d[1] + ':00 and ' + d[1] + ':59 at ' + days[d[0]]) }) .on('mouseout', function (d) { span.text('') }) var dates = d3.nest() .key(function (d) { return d[0] }) .entries(data) var hours = d3.nest() .key(function (d) { return d[1] }) .entries(data) var daysMean = dates.map(function (v) { return d3.mean(v.values, function(d) { return d[2] }) }) var hoursMean = hours.map(function (v) { return d3.mean(v.values, function(d) { return d[2] }) }) svg.append('g') .attr('transform', 'translate(' + (30 + 20 * 24 + 5) + ',30)') .selectAll('rect') .data(daysMean) .enter() .append('rect') .attr('width', 20) .attr('height', 20) .attr('y', function (d, i) { return i * 20 }) .style('fill', color) svg.append('g') .attr('transform', 'translate(30,' + (30 + 20 * 7 + 5) + ')') .selectAll('rect') .data(hoursMean) .enter() .append('rect') .attr('width', 20) .attr('height', 20) .attr('x', function (d, i) { return i * 20 }) .style('fill', color) }) </script> </body> </html>
Modified
http://d3js.org/d3.v4.min.js
to a secure url
https://d3js.org/d3.v4.min.js