Javascript 根据D3力布局中的数据选择不同的形状

Javascript 根据D3力布局中的数据选择不同的形状,javascript,d3.js,Javascript,D3.js,我正在尝试一个有两种形状的力布局:圆形和三角形。但是,我得到一个错误-无法读取未定义的属性“symbol”。这是相关的代码片段: var shape = {"action": "circle", "why-hard": "triangle"}; var node = g.append("g") .attr("class", "nodes") .selectAll("circle") .data(graph.nodes) .enter().append("

我正在尝试一个有两种形状的力布局:圆形和三角形。但是,我得到一个错误-无法读取未定义的属性“symbol”。这是相关的代码片段:

var shape = {"action": "circle", "why-hard": "triangle"};    

var node = g.append("g")
    .attr("class", "nodes")
    .selectAll("circle")
    .data(graph.nodes)
    .enter().append("circle")
    .attr("d", d3.svg.symbol().type(function(d) { return shape[d.type]; }))

您可能正在使用d3v4。D3v4有许多名称空间更改,这些更改将从v3中断代码,而且您的符号代码似乎来自v3。在本例中:

.attr("d", d3.svg.symbol().type(function(d) { return shape[d.type]; }))
将给出错误:
uncaughttypeerror:无法在Chrome中读取未定义的
(如上所述)的属性“symbol”,并且在Firefox中,
d3.svg未定义。对于v4,请尝试以下内容:

 .attr("d", d3.symbol().type(d3.symbolCross));
要在v4中动态分配类型,方法基本上与您的方法相同:

 .attr("d", d3.symbol().type( function(d,i) { return d3.symbols[i];} ) )
看小提琴

有关形状的v4文档,请参阅