JSFiddle - React, Tailwind, and code Playground
by sunnycyk
HTML
<script src="http://d3js.org/d3.v3.min.js"></script>
<div ng-app="charts">
<div ng-controller="mainCtrl">
<chart-form></chart-form>
<bar-chart height="options.height" data="data" hovered="hovered(args)"></bar-chart>
<bar-chart height="options.height" data="data2" hovered="hovered(args)"></bar-chart>
</div>
</div>
CSS
body {
font: 14px sans-serif;
}
.axis path, .axis line {
fill: none;
stroke: black;
shape-rendering: crispEdges;
}
.axis path{
fill: none;
stroke: none;
}
.bar {
fill: steelblue;
}
JavaScript
d3.custom = {};
d3.custom.barChart = function module() {
var margin = {top: 20, right: 20, bottom: 40, left: 40},
width = 500,
height = 500,
gap = 0,
ease = 'cubic-in-out';
var svg, duration = 500;
var dispatch = d3.dispatch('customHover');
function exports(_selection) {
_selection.each(function(_data) {
var chartW = width - margin.left - margin.right,
chartH = height - margin.top - margin.bottom;
var x1 = d3.scale.ordinal()
.domain(_data.map(function(d, i){ return i; }))
.rangeRoundBands([0, chartW], .1);
var y1 = d3.scale.linear()
.domain([0, d3.max(_data, function(d, i){ return d; })])
.range([chartH, 0]);
var xAxis = d3.svg.axis()
.scale(x1)
.orient('bottom');
var yAxis = d3.svg.axis()
.scale(y1)
.orient('left');
var barW = chartW / _data.length;
if(!svg) {
svg = d3.select(this)
.append('svg')
.classed('chart', true);
var container = svg.append('g').classed('container-group', true);
container.append('g').classed('chart-group', true);
container.append('g').classed('x-axis-group axis', true);
container.append('g').classed('y-axis-group axis', true);
}
svg.transition().duration(duration).attr({width: width, height: height})
svg.select('.container-group')
.attr({transform: 'translate(' + margin.left + ',' + margin.top + ')'});
svg.select('.x-axis-group.axis')
.transition()
.duration(duration)
.ease(ease)
.attr({transform: 'translate(0,' + (chartH) + ')'})
.call(xAxis);
svg.select('.y-axis-group.axis')
...