Porting d3.js histogram layout example to p5.js using d3.js tools and libraries as much as possible.
Original d3.js code: http://bl.ocks.org/mbostock/3048450
A Pen by Sepand Ansari on CodePen.
Porting d3.js histogram layout example to p5.js using d3.js tools and libraries as much as possible.
Original d3.js code: http://bl.ocks.org/mbostock/3048450
A Pen by Sepand Ansari on CodePen.
// port of http://bl.ocks.org/mbostock/3048450 into p5.js | |
function setup() { | |
/* | |
This section of code is the exact copy of d3.js example | |
*/ | |
// Generate a Bates distribution of 10 random variables. | |
var values = d3.range(5000).map(d3.random.bates(10)); | |
// A formatter for counts. | |
var formatCount = d3.format(",.0f"); | |
var margin = {top: 10, right: 30, bottom: 30, left: 30}, | |
width = 960 - margin.left - margin.right, | |
height = 500 - margin.top - margin.bottom; | |
var x = d3.scale.linear() | |
.domain([0, 1]) | |
.range([0, width]); | |
// Generate a histogram using twenty uniformly-spaced bins. | |
var data = d3.layout.histogram() | |
.bins(x.ticks(20)) | |
(values); | |
var y = d3.scale.linear() | |
.domain([0, d3.max(data, function(d) { return d.y; })]) | |
.range([height, 0]); | |
/* | |
up tp here the code is exactly the same as d3.js example. | |
below p5.js translation starts. | |
*/ | |
createCanvas(width, height); | |
/* | |
var bar = svg.selectAll(".bar") | |
.data(data) | |
.enter().append("g") | |
.attr("class", "bar") | |
.attr("transform", function(d) { return "translate(" + x(d.x) + "," + y(d.y) + ")"; }); | |
*/ | |
for(var i = 0; i< data.length; i++) { | |
var d = data[i]; | |
push(); | |
translate(x(d.x), y(d.y)); | |
/* | |
bar.append("rect") | |
.attr("x", 1) | |
.attr("width", x(data[0].dx) - 1) | |
.attr("height", function(d) { return height - y(d.y); }); | |
*/ | |
fill(70, 130, 180); | |
noStroke(); | |
rect(1, 1, x(data[0].dx) - 1, height - y(d.y) ); | |
/* | |
bar.append("text") | |
.attr("dy", ".75em") | |
.attr("y", 6) | |
.attr("x", x(data[0].dx) / 2) | |
.attr("text-anchor", "middle") | |
.text(function(d) { return formatCount(d.y); }); | |
*/ | |
fill(255); | |
textAlign(CENTER); | |
text(formatCount(d.y), x(data[0].dx) / 2, -2, x(data[0].dx), 20 ); | |
pop(); | |
/* | |
svg.append("g") | |
.attr("class", "x axis") | |
.attr("transform", "translate(0," + height + ")") | |
.call(xAxis); | |
*/ | |
// N/A in p5.js. | |
} | |
} | |
<script src="http://d3js.org/d3.v3.min.js"></script> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.4.5/p5.js"></script> |