function barChart() { var margin = {top: 30, right: 20, bottom: 40, left: 60}, width = 960 - margin.left - margin.right, height = 500 - margin.top - margin.bottom, xScale = d3.scaleBand(), yScale = d3.scaleLinear(), x = 0, y = 1, padding = .1, svg, title; function chart(selection) { selection.each(function(data) { console.log(x) svg = d3.select(this).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] + ')'); xScale.range([0,width]) .domain(data.map(d => d[x])) .padding(padding); yScale.range([height, 0]) .domain([0, d3.max(data, d => d[y])]); var xAxis = svg.append('g') .attr('transform', 'translate(0,' + height + ')') .call(d3.axisBottom(xScale)); var yAxis = svg.append('g') .call(d3.axisLeft(yScale) .tickFormat(d3.format(".0s"))); var bars = svg.selectAll('rect') .data(data) .enter().append('rect') .attr('x', d => xScale(d[x])) .attr('y', d => yScale(d[y])) .attr('width', xScale.bandwidth()) .attr('height', d => height - yScale(d[y])) .attr('fill', 'steelblue'); var xLabel = svg.append('g') .attr('class', 'xLable') .append('text') .text(x) .attr('transform', 'translate(' + [width/2, height + margin.bottom*(3/4)] + ')'); var yLabel = svg.append('g') .attr('class', 'yLabel') .append('text') .text(y) .attr('transform', 'translate(' + [-margin.left/2, height/2] + ')rotate(-90)'); if (title) { svg.append('g') .attr('class', 'title') .append('text') .text(title) .attr('transform', 'translate(' + [width/2 - margin.left, -margin.top/2] + ')') .attr('font-size', 20); } }); } chart.width = function(_) { if (!arguments.length) return width; width = _; return chart; } chart.height = function(_) { if (!arguments.length) return height; height = _; return chart; } chart.x = function(_) { if (!arguments.length) return x; x = _; return chart; } chart.y = function(_) { if (!arguments.length) return y; y = _; return chart; } chart.padding = function(_) { if (!arguments.length) return padding; padding = _; return chart; } chart.title = function(_) { if (!arguments.length) return title; title = _; return chart; } return chart; }