var Legend = function(group) { group.attr('class', 'legend'); this.group = group; this.markWidth = 25; this.markHeight = 25; this.markPadding = 5; } Legend.prototype.draw = function(dataset) { var marks = this.group.selectAll('.legend-label') .data(dataset) .enter() .append('g') .attr('class', 'legend-mark'); var thisLegend = this; marks.append('rect') .attr('x', 0) .attr('y', function(d, i) { return (thisLegend.markHeight + thisLegend.markPadding) * i; }) .attr('width', thisLegend.markWidth) .attr('height', thisLegend.markHeight) .attr('fill', function(d) { return d.color; }); marks.append('text') .attr('transform', function(d, i) { var x = thisLegend.markWidth + thisLegend.markPadding; var y = (thisLegend.markHeight + thisLegend.markPadding) * i; y += 20; return 'translate(' + x + ',' + y + ')'; }) .attr('class', 'legend-text-0') .text(function(d) { return d.category; }); }