从节点和边而不是子节点绘制径向树

时间:2014-12-16 21:41:23

标签: d3.js tree neo4j

我能够从neo4j数据中用d3绘制图形,但我正在努力绘制一棵树。我见过的例子使用了一个json文件,其中每个节点都包含一个自己子节点的数组。虽然这看起来很方便,但至少对我而言,与neo4j接口并不容易。实际上,neo4j不允许从(n) - (m)图中返回{nodes:collect(distinct {name:n.name,children:collect(distinct {name:m.name})})}。然而,它会让一个人从路径返回节点和边的集合。

我的问题是,是否可以在节点和边缘绘制d3中的树而不为数据结构中的每个节点生成子节点?

非常感谢提前 皮尔

2 个答案:

答案 0 :(得分:1)

从neo4j检索节点和关系的Cypher查询将是:

exp_y

因此,javascript和d3代码: - 从json中提取节点和关系

MATCH p=() <-[:REPORTS8TO]- ()
UNWIND nodes(p) AS n UNWIND rels(p) AS r 
WITH n, r ORDER BY n.Name 
RETURN {nodes: COLLECT(DISTINCT n), links: COLLECT(DISTINCT {source: id(endNode(r)), target: id(startNode(r))})}

画树

var obj = JSON.parse(xmlhttp.responseText);
var json = obj.data[0][0];

var nodeMap = {};
json.nodes.forEach(function(x) {
    nodeMap[x.id] = x;
    nodeMap[x.id].children = [];
});

var links = json.links.map(function(x) {
    nodeMap[x.source].children.push(nodeMap[x.target]);
    return { source: nodeMap[x.source], target: nodeMap[x.target] };
});

答案 1 :(得分:0)

对于返回经理及其各自子女的密码查询,这是怎么回事。

match (manager)<-[:REPORTS_TO]-(direct_reports)
return id(manager), collect(id(direct_reports))