有没有办法根据不同的数据向我的力导向图添加不同的形状?

时间:2017-02-09 15:18:18

标签: javascript d3.js symbols

我确定此处已经涉及另一个问题但是,在我的代码上尝试了许多不同的示例之后,我似乎无法使其发挥作用。

我试图使我的力导向图上的节点具有不同的形状,具体取决于节点的名称,例如,如果节点被命名为' Switch'它应该显示为正方形。

我已经根据数据设计了改变节点颜色的设置,并希望形状类似但不能使用d3.v4使其工作。

任何帮助?

{{1}}

非常感谢

1 个答案:

答案 0 :(得分:2)

你不能使用:

var shape = d3.symbolTypes;
....
shape(d.name);

因为{3}没有在d3 v4中定义(它在某些版本的v3中),所以在v4中使用d3.symbolTypes这是一个数组而不是函数。

但是,与颜色一样,您可以为形状创建序数比例:

d3.symbols

现在你所要做的就是附加那个形状:

var color = d3.scaleOrdinal(d3.schemeCategory20);
var shape = d3.scaleOrdinal(d3.symbols);

由于您要附加圈子,并且现在正在追加路径,因此您需要更改.append('path') .attr("d", d3.symbol().type( function(d) { return shape(d[property]);} ) ); ,并且由于圈子中包含.append('circle') cx元素,您需要更改为转换你设定位置的地方。

这是一个bl.ock,它应该在实践中根据MBostock的力导向图(here)显示出来

请记住cy数组中只有七个形状。

编辑: 如果要根据属性指定为每个节点显示哪些形状(而不是让序数比例设置形状),则可以向数据中添加包含形状名称的属性(例如:{{1} }),或创建一个接收数据值并输出符号名称的函数。但序数量表最容易。