Принятый ответ работал отлично для меня, пока я не проверил в Edge. Я не могу комментировать, так как у меня недостаточно кармы или что-то еще, но я использовал это решение и нашел проблему с Microsoft Edge, которая не использует x или y, просто верх / левый / нижний / правый и т. Д.
Таким образом, вышеуказанный код должен быть:
function getBoundingBoxCenter (selection) {
// get the DOM element from a D3 selection
// you could also use "this" inside .each()
var element = selection.node();
// use the native SVG interface to get the bounding box
var bbox = element.getBBox();
// return the center of the bounding box
return [bbox.left + bbox.width/2, bbox.top + bbox.height/2];
}