function makePatch(xScale, yScale, parent, callback){ var parent = d3.select(parent); var xRange = xScale.range(), yRange = yScale.range(); var container = parent.append('g'); if(!callback){ var callback = function(x,y){ console.log(x,y); } } var drag = d3.behavior.drag() .origin(patch) .on("drag", function(d){ callback(xScale.invert(d3.event.x), yScale.invert(d3.event.y)); }) var patch = container.append('rect') .attr('x', Math.min(xRange[0], xRange[1]) ) .attr('y', Math.min(yRange[0], yRange[1]) ) .attr('width', Math.abs(xRange[1] - xRange[0])) .attr('height', Math.abs(yRange[1] - yRange[0])) .attr('class', 'ui-patch') .on('click', function(d){ callback(xScale.invert(d3.event.x), yScale.invert(d3.event.y)) }) .call(drag); }