我确定此处已经涉及另一个问题但是,在我的代码上尝试了许多不同的示例之后,我似乎无法使其发挥作用。
我试图使我的力导向图上的节点具有不同的形状,具体取决于节点的名称,例如,如果节点被命名为' Switch'它应该显示为正方形。
我已经根据数据设计了改变节点颜色的设置,并希望形状类似但不能使用d3.v4使其工作。
任何帮助?
{{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} }),或创建一个接收数据值并输出符号名称的函数。但序数量表最容易。