D3 Hexbin

by ramnathv

HTML

<script src="//d3js.org/d3.v3.min.js"></script>
<script src="//d3js.org/d3.hexbin.v0.min.js?5c6e4f0"></script>
<script src="//rawgit.com/gka/d3-jetpack/master/d3-jetpack.js"></script>
<script src="//rawgit.com/Caged/d3-tip/master/index.js"></script>
<script src="//rawgit.com/ramnathv/a5a3199538f86817ec1b/raw/f6627fc544e65d8e6186ba87556f743caa3f2730/visutils.js"></script>
<link rel="stylesheet" href="//rawgit.com/Caged/d3-tip/master/examples/example-styles.css">
<script src="//uwdata.github.io/datalib/datalib.js"></script>
<link rel="stylesheet" href="//keen.github.io/dashboards/assets/lib/bootstrap/dist/css/bootstrap.min.css">
<div class="container">
    <div class="row">
        <div class="col-xs-8">
          <div id='svg'></div>
          <div>
            <input id='slider' type="range" min=10 
              max=10000 value=30 />
          </div>
        </div>
    </div>
</div>

CSS

.axis text {
  font: 10px sans-serif;
}

.axis path,
.axis line {
  fill: none;
  stroke: #000;
  shape-rendering: crispEdges;
}

.hexagon {
  fill: none;
  stroke: #000;
  stroke-width: .5px;
}
.container{
  margin-top: 30px;
}
#slider{
  margin-left: 40px;
}

JavaScript

var margin = {top: 20, right: 20, bottom: 30, left: 40},
    width = 500 - margin.left - margin.right,
    height = 350 - margin.top - margin.bottom;

S = {}
S.x = d3.scale.linear().range([0, width]).domain([0, 600])
S.y = d3.scale.linear().range([height, 0]).domain([0, 400])

A = {}
A.x = function(d){return d['x']}
A.y = function(d){return d['y']}

var points = makeData(10000)

var color = d3.scale.linear()
    .domain([0, 20])
    .range(["white", "steelblue"])
    .interpolate(d3.interpolateLab);

var hexbin = d3.hexbin()
    .size([width, height])
    .radius(10)
    .x(A.x)
    .y(A.y)

var x = d3.scale.identity()
    .domain([0, width]);

var y = d3.scale.linear()
    .domain([0, height])
    .range([height, 0]);

var xAxis = d3.svg.axis()
    .scale(x)
    .orient("bottom")
    //.tickSize(6, -height);

var yAxis = d3.svg.axis()
    .scale(y)
    .orient("left")
    //.tickSize(6, -width);

/*
var svg = d3.select("svg")
    .attr("width", width + margin.left + margin.right)
    .attr("height", height + margin.top + margin.bottom)
  .append("g")
    .attr("transform", "translate(" + margin.left + "," + margin.top + ")");
*/

var svg = createSVG(
    d3.select('#svg'), 
    width + margin.left + margin.right, 
    height + margin.top + margin.bottom
  )
  .append("g")
    .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

svg.append("clipPath")
    .attr("id", "clip")
  .append("rect")
    .attr("class", "mesh")
    .attr("width", width)
    .attr("height", height);



var container = svg.append('g')
     .attr('clip-path', 'url(#clip)') 

d3.select("input").on("change", function(){
  var n = this.value
  dat = points.slice(0, n)
  if (n > 2000){
    container.selectAll(".circle").remove()
    container.call(drawSquare, dat)
  } else {
    container.selectAll(".square").remove()
    container.call(drawCircle, dat)
  }
})

svg.append("g")
    .attr("class", "y axis")
    .call(yAxis);

svg.append("g")
    .attr("class", "x axis")
   ...