3

我正在尝试向我的 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;
    });

我不确定实现这一目标的最佳方法。提前感谢您的帮助。

4

1 回答 1

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>

请记住使用带有小写字母的相对坐标(如上)声明路径,而不是使用大写字母的绝对坐标。

于 2013-10-26T06:52:25.190 回答