JSFiddle - React, Tailwind, and code Playground
HTML
<form>
<label><input type="radio" name="mode" value="grouped"> Grouped</label>
<label><input type="radio" name="mode" value="stacked" checked> Stacked</label>
</form>
CSS
body {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
margin: auto;
position: relative;
width: 960px;
}
text {
font: 10px sans-serif;
}
.axis path,
.axis line {
fill: none;
stroke: #000;
shape-rendering: crispEdges;
}
form {
position: absolute;
right: 10px;
top: 10px;
}
JavaScript
var n = 3, // number of layers
m = 3, // number of samples per layer
stack = d3.layout.stack(),
// layers = stack(d3.range(n).map(function() { return bumpLayer(m, .1); })),
layers = [
[
{"x":0,"y":200,"y0":0},
{"x":1,"y":150,"y0":0},
{"x":2,"y":100,"y0":0}
],
[
{"x":0,"y":100,"y0":1},
{"x":1,"y":80,"y0":1},
{"x":2,"y":70,"y0":1}
],
[
{"x":0,"y":30,"y0":2},
{"x":1,"y":40,"y0":2},
{"x":2,"y":50,"y0":2}
]
];
yGroupMax = d3.max(layers, function(layer) { return d3.max(layer, function(d) { return d.y; }); }),
yStackMax = d3.max(layers, function(layer) { return d3.max(layer, function(d) { return d.y0 + d.y; }); });
console.log(layers);
var margin = {top: 40, right: 10, bottom: 20, left: 10},
width = 960 - margin.left - margin.right,
height = 500 - margin.top - margin.bottom;
var x = d3.scale.ordinal()
.domain(d3.range(m))
.rangeRoundBands([0, width], .08);
var y = d3.scale.linear()
.domain([0, yStackMax])
.range([height, 0]);
var color = d3.scale.linear()
.domain([0, n - 1])
.range(["#aad", "#556"]);
// var formatAxis = d3.format(" 0");
// var axis = d3.svg.axis()
// .scale(xScale)
// .tickFormat(formatAxis)
// .ticks(3)
// .tickValues([100, 200, 300]) //specify an array here for values
// .orient("bottom");
var xAxis = d3.svg.axis()
.scale(x)
.tickSize(2)
.tickPadding(6)
.tickFormat(function(d) { return "test" + d; })
.orient("bottom");
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 + "," +...