Skip to content

Instantly share code, notes, and snippets.

@cdagli
Last active February 6, 2018 11:05
Show Gist options
  • Save cdagli/230eac2f1c4b30ba7b62286850402658 to your computer and use it in GitHub Desktop.
Save cdagli/230eac2f1c4b30ba7b62286850402658 to your computer and use it in GitHub Desktop.
Histogram
license: mit
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<script src="https://d3js.org/d3.v3.min.js"></script>
<style>
body { margin:0;position:fixed;top:0;right:0;bottom:0;left:0; }
.bar {
fill: steelblue;
opacity: .4;
}
.bar:hover {
opacity: 1;
}
.bar text {
fill: white;
font: 16px sans-serif;
}
</style>
</head>
<body>
<script>
'use strict';
function generateData(firstValue, dataCount, bucketSize)
{
var data = [];
for(var i = 0; i<dataCount; i++)
{
data.push({
start: firstValue + (i * bucketSize),
count: Math.round(Math.random() * 500)
})
}
return data;
}
var data = generateData(200, 20, 100);
console.log(data)
var margin = {top: 20, right: 20, bottom: 20, left: 20},
padding = {top: 60, right: 60, bottom: 60, left: 60},
outerWidth = 960,
outerHeight = 500,
innerWidth = outerWidth - margin.left - margin.right,
innerHeight = outerHeight - margin.top - margin.bottom,
width = innerWidth - padding.left - padding.right,
height = innerHeight - padding.top - padding.bottom;
var svg = d3.select("body").append("svg")
.attr("width", outerWidth)
.attr("height", outerHeight)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
var startArr = data.map(function(d){ return d.start});
var endArr = data.map(function(d){ return d.end});
var x = d3.scale.ordinal().rangeRoundBands([0, width]).domain(startArr.concat(endArr));
var yMinValue = d3.min(data.map(function(d){ return d.count}));
var yMaxValue = d3.max(data.map(function(d){ return d.count}));
var y = d3.scale.linear().range([0, height]).domain([yMinValue > 0 ? 0 : yMinValue, yMaxValue < 0 ? 0 : yMaxValue])
.range([height, 0]).nice();
var barGroup = svg.append('g').attr("clip-path","url(#ellipse-clip)");
var bar = barGroup.selectAll(".bar")
.data(data)
.enter().append("g")
.attr("class", "bar")
bar.append('rect').attr({
x: function(d) { console.log(x(d.start)); return x(d.start)},
width: x.rangeBand(),
height: function (d)
{
return Math.abs(y(d.count) - y(0));
},
y: function (d)
{
return d.count > 0 ? y(d.count) : y(0);
}
}).attr('class', 'bar')
// bar.append("text")
// .attr("dy", ".75em")
// .attr("y", height - 20)
// .attr("x",
// function(d){return x(d.start) + 80 })
// .attr("text-anchor", "middle")
// .text(function(d) { return d.count; });
</script>
</body>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment