Skip to content

Instantly share code, notes, and snippets.

@jermspeaks
Last active June 24, 2016 18:13
Show Gist options
  • Save jermspeaks/2d70a9636f729ac8bc48d4152d390903 to your computer and use it in GitHub Desktop.
Save jermspeaks/2d70a9636f729ac8bc48d4152d390903 to your computer and use it in GitHub Desktop.

Learning about Histograms

Playing around with d3 v4 Histograms

Concepts

Histograms

TBA

Generating Data

Understanding Randomness

d3 offers different ways on generating randomness.

d3.randomUniform([min, ][max])

Using a uniform random number generator distributes a range of numbers evenly. Math.random() also uses the same distribution.

Looking at the first chart, we can see how flat the graph looks.

d3.randomBates()

Generating randomness

Documentation

Returns a function for generating random numbers with a Bates distribution with n independent variables.

Wolfram Alpha

Bates Distribution represents the distribution of a mean of n random variables uniformly distributed from 0 to 1.

d3.randomBates(1);
d3.randomBates(10);
d3.randomBates(100);
<!DOCTYPE html>
<meta charset="utf-8">
<style>
.bar rect {
fill: steelblue;
}
.bar text {
fill: #fff;
font: 10px sans-serif;
}
</style>
<body>
<script src="https://d3js.org/d3.v4.0.0-alpha.50.min.js"></script>
<script>
var uniformData = d3.range(1000).map(d3.randomUniform(0, 1));
var normalData = d3.range(1000).map(d3.randomNormal(0.5, 0.15));
var logNormalData = d3.range(1000).map(d3.randomLogNormal(-1, 0.5));
var batesData = d3.range(1000).map(d3.randomBates(10));
var irwinHallData = d3.range(1000).map(d3.randomIrwinHall(1.41));
var exponentialData = d3.range(1000).map(d3.randomExponential(4));
const chartWidth = 500;
const chartHeight = 300;
function createChart(data) {
var formatCount = d3.format(",.0f");
var margin = {top: 10, right: 30, bottom: 30, left: 30},
width = chartWidth - margin.left - margin.right,
height = chartHeight - margin.top - margin.bottom;
var x = d3.scaleLinear()
.rangeRound([0, width]);
var bins = d3.histogram()
.domain(x.domain())
.thresholds(x.ticks(20))
(data);
var y = d3.scaleLinear()
.domain([0, d3.max(bins, function(d) { return d.length; })])
.range([height, 0]);
var svg = d3.select("body").append("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 bar = svg.selectAll(".bar")
.data(bins)
.enter().append("g")
.attr("class", "bar")
.attr("transform", function(d) { return "translate(" + x(d.x0) + "," + y(d.length) + ")"; });
bar.append("rect")
.attr("x", 1)
.attr("width", x(bins[0].x1) - x(bins[0].x0) - 1)
.attr("height", function(d) { return height - y(d.length); });
bar.append("text")
.attr("dy", ".75em")
.attr("y", 6)
.attr("x", (x(bins[0].x1) - x(bins[0].x0)) / 2)
.attr("text-anchor", "middle")
.text(d => formatCount(d.length));
svg.append("g")
.attr("class", "axis axis--x")
.attr("transform", "translate(0," + height + ")")
.call(d3.axisBottom(x));
}
createChart(uniformData);
createChart(normalData);
createChart(logNormalData);
createChart(batesData);
createChart(irwinHallData);
createChart(exponentialData);
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment