добавить разные формы в макет d3 force

Я пытаюсь добавить разные формы в свой макет силы d3, но безуспешно. Конечная цель — определить форму на основе свойств самого объекта узла. Я использую selection.enter(), а затем .append() такие фигуры. Поскольку макет, направленный силой, принимает только один массив узлов, а .append() принимает строку, а не функцию.

node = vis.selectAll('.node')
    .data(nodes, function(d) {
        return d.filename
    });

тогда...

node.enter()
    .append(**'rect'**) //I need to vary this based on node properties
    .attr('class', function(d) { 
        return 'node ' + d.entityType;
        //return d.entityType;
    });

Я не уверен, как лучше всего это сделать. Заранее благодарю за любую помощь.


person jbenckert    schedule 13.06.2013    source источник
comment
Вы видели это?   -  person Lars Kotthoff    schedule 13.06.2013
comment
Я проверю это. Спасибо!   -  person jbenckert    schedule 13.06.2013
comment
возможный дубликат Различные символы узлов для принудительно-направленного графа d3.js   -  person a darren    schedule 13.03.2014


Ответы (1)


Я думаю, что было бы проще вставить пути svg, а не прямоугольники или круги. Он довольно гибкий, и вы сможете добавить к графику силы практически любую фигуру, которую только сможете придумать.

Следующий код рисует звезду. http://jsfiddle.net/UkeMS/

введите здесь описание изображения

<svg>
    <path  d="
        m 100 100
        l 23 12
        l -4 -26
        l 19 -19
        l -27 -4
        l -11 -23
        l -12 23
        l -27 4
        l 19 19
        l -4 26
        l 24 -12
    "/>
</svg>

Просто не забудьте объявить пути, используя относительные координаты со строчными буквами (как указано выше), а не абсолютные координаты, используя заглавные буквы.

person Walter Roman    schedule 26.10.2013