Javascript D3力定向图:更新节点位置
我刚开始学习英语。我花了几天时间研究api并回顾了示例,并根据示例启动了一个我自己的项目 如果不是使用简单形状(Javascript D3力定向图:更新节点位置,javascript,svg,d3.js,force-layout,Javascript,Svg,D3.js,Force Layout,我刚开始学习英语。我花了几天时间研究api并回顾了示例,并根据示例启动了一个我自己的项目 如果不是使用简单形状(square,circle…)而是使用路径绘制节点,如何更新勾选后节点的位置 我提供了一个可以在这里查看的示例: 对于常规形状,您可以简单地使用transform属性相应地移动节点,请参见,例如..对于常规形状,您可以简单地使用transform属性相应地移动节点,请参见,例如..您正在使用大写字母绘制具有绝对位置的路径元素。相反,请尝试使用小写字母使用相对坐标来声明路径。这将允许您使
square
,circle
…)而是使用路径绘制节点,如何更新勾选
后节点的位置
我提供了一个可以在这里查看的示例:
对于常规形状,您可以简单地使用
transform
属性相应地移动节点,请参见,例如..对于常规形状,您可以简单地使用transform
属性相应地移动节点,请参见,例如..您正在使用大写字母绘制具有绝对位置的路径元素。相反,请尝试使用小写字母使用相对坐标来声明路径。这将允许您使用svgtransform
属性基于力模拟器更轻松地移动节点
关于带顶点和相对点的绘图路径:
您正在使用大写字母以绝对位置绘制路径元素。相反,请尝试使用小写字母使用相对坐标来声明路径。这将允许您使用svg
transform
属性基于力模拟器更轻松地移动节点
关于带顶点和相对点的绘图路径:
嗨,拉尔斯,谢谢你的回答。我也尝试使用“变换属性”,但节点不再与链接连接。示例->您应用了两次转换,一次应用于包装器,一次应用于实际元素。你只需要吃一次谢谢你。。。我花了3个多小时解决这个问题:)嗨,拉尔斯,谢谢你的回答。我也尝试使用“变换属性”,但节点不再与链接连接。示例->您应用了两次转换,一次应用于包装器,一次应用于实际元素。你只需要吃一次谢谢你。。。我花了3个多小时解决这个问题:)
var svg = d3.select('#view').attr({width: 300, height: 300});
var data = {
"nodes": [
{
"id": "node_0",
"name": "Node 0",
"color": "blue",
"h": 10,
"w": 20,
"t": "triangle"
},....
],
"links": [
{
"source": 0,
"target": 1
},...
]
};
var force = d3.layout.force().size([300, 300])
.linkDistance(50)
.nodes(data.nodes)
.links(data.links).start()
var link = svg.selectAll('.link').data(data.links).enter()
.append('line')
.attr('class', 'link')
.attr({"stroke": "#ccc", "stroke-width": 1.5});
var wrapper = svg.selectAll('.node').data(data.nodes).enter()
.append('g')
.attr('class', 'node')
.attr('x', function(d){return d.x})
.attr('y', function(d){return d.y});
var getShape = function(t, x, y, w, h){
var points = (t == 'triangle') ?
[ [x + w/2, y], [x + w/2 , y], [x + w, y + h], [x, y + h]]
:
[ [x, y], [x + w, y], [x + w, y + h], [x, y + h]];
return d3.svg.line()(points)
}
var node = wrapper.append('path')
.attr('d', function(d){return getShape(d.t, d.x , d.y, d.h, d.w) })
.attr('x', function(d){return d.x})
.attr('y', function(d){return d.y})
.attr('fill', function(d){return d.color})
.call(force.drag);
force.on('tick', function(){
link
.attr('x1', function(d){return d.source.x})
.attr('y1', function(d){return d.source.y})
.attr('x2', function(d){return d.target.x})
.attr('y2', function(d){return d.target.y})
node
.attr('cx', function(d){return d.x})
.attr('cy', function(d){return d.y});
});