D3 Hexbin
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")
...