d3.lineChart = function() { var width = 400, height = 300, xExtent, yExtent, x, y, xScale = d3.scale.linear(), yScale = d3.scale.linear(), path = d3.svg.line(); function chart(selection, lineClass, data) { xScale .domain(xExtent || d3.extent(data, x)) .range([0, width]); yScale .domain(yExtent || d3.extent(data, y)) .range([height, 0]); path .x(function(d) { return xScale(x(d)); }) .y(function(d) { return yScale(y(d)); }); var lineSelectorString = "." + (lineClass.replace(" ", ".")); var lines = selection.selectAll(lineSelectorString).data([data]); lines.enter().append("path") .attr("class", lineClass); lines .transition().duration(333) .attr("d", path); lines.exit().remove(); } 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.xExtent = function(_) { if (!arguments.length) return xExtent; xExtent = _; return chart; }; chart.yExtent = function(_) { if (!arguments.length) return yExtent; yExtent = _; return chart; }; // Getter functions chart.xAxis = function() { return d3.svg.axis().scale(xScale).orient("bottom"); }; chart.yAxis = function() { return d3.svg.axis().scale(yScale).orient("left"); }; chart.xScale = function() { return xScale; }; chart.yScale = function() { return yScale; }; return chart; }