index.html
<!DOCTYPE html>
<meta charset="utf-8">
<style>
rect{
fill:#42A5F5;
}
line, path{
stroke-opacity:0.5;
shape-rendering:crispEdges;
}
.tick{
stroke-dasharray:2;
}
</style>
<body>
<svg width="960" height="600">
<g id="left" transform="translate(115, 25)"></g>
<g id="right" transform="translate(595, 25)"></g>
<g id="top" transform="translate(115, 325)"></g>
<g id="bottom" transform="translate(595, 325)"></g>
</svg>
<script src="https://d3js.org/d3.v4.min.js"></script>
<script src="//vizjs.org/viz.v1.1.7.min.js"></script>
<script>
var data=[['A', 1],['A', 3],['B', 3],['C', -5],['D', 8]];
var barLeft = viz.bar().data(data).width(250).height(250).dock('l');
d3.select("#left")
.append("g").attr("transform", "translate(0,0)")
.call(d3.axisTop().scale(barLeft.valueScale()).tickSize(-250).tickSizeOuter(0));
d3.select("#left").call(barLeft);
var barRight = viz.bar().data(data).width(250).height(250).dock('r');
d3.select("#right")
.append("g").attr("transform", "translate(0,0)")
.call(d3.axisTop().scale(barRight.valueScale()).tickSize(-250).tickSizeOuter(0));
d3.select("#right").call(barRight);
var barTop = viz.bar().data(data).width(250).height(250).dock('t');
d3.select("#top")
.append("g").attr("transform", "translate(0,0)")
.call(d3.axisLeft().scale(barTop.valueScale()).tickSize(-250).tickSizeOuter(0));
d3.select("#top").call(barTop);
var barBottom = viz.bar().data(data).width(250).height(250).dock('b');
d3.select("#bottom")
.append("g").attr("transform", "translate(0,0)")
.call(d3.axisLeft().scale(barBottom.valueScale()).tickSize(-250).tickSizeOuter(0));
d3.select("#bottom").call(barBottom);
d3.select(self.frameElement).style("height","600px").style("width","960px");
</script>