Я использовал d3 v4 и этот метод (слегка модифицированный), чтобы нарисовать выпуклую оболочку вокруг узлов в силовом графике. Отлично работает, но теперь я хочу обозначить эти группы узлов. В конечном счете, я хотел бы нарисовать что-то похожее на этот SVG. Можно ли добавить текстовый элемент в выпуклый нулевой многоугольник, чтобы он перемещался по мере перемещения многоугольника или мне нужно было создать отдельную группировку?
Я бы подошел к такой проблеме:
В d3 v4 это выглядит примерно так:
var polygon = d3.polygonHull(vertices);
Затем вы найдете центр тяжести:
var centroid = d3.polygonCentroid(polygon);
И обновите текст:
text.attr("transform","translate("+ centroid +")")
В d3v3 и v2 код может выглядеть по-другому:
var polygon = d3.geom.polygon(d3.geom.hull(vertices));
var centroid = polygon.centroid();
text.attr("transform","translate("+centroid+")");
Что касается обновления нескольких текстов сразу, есть куча потенциальных методов для этого, поэтому я не буду говорить с ним здесь.
Здесь приведен пример одного текстового элемента, обновляемого в v4.