Json 使用链接节点名称的d3力有向图

Json 使用链接节点名称的d3力有向图,json,d3.js,Json,D3.js,D3.js力定向图需要格式为的json数据 { "nodes" : [{"name" : "User Login"}, {"name" : "Appointments"}, {"name" : "Store Visit"}, {"name" : "Visit History"}, {"name" : "Resume Store Visit"}], "links" : [{"source

D3.js力定向图需要格式为的json数据

{
  "nodes" : [{"name" : "User Login"},
             {"name" : "Appointments"},
             {"name" : "Store Visit"},
             {"name" : "Visit History"},
             {"name" : "Resume Store Visit"}],

 "links" : [{"source" : 1, "target" : 0, "value" : 1},
            {"source" : 2, "target" : 0, "value" : 8},
            {"source" : 3, "target" : 0, "value" : 10},
            {"source" : 3, "target" : 2, "value" : 6},
            {"source" : 4, "target" : 0, "value" : 1}]
};
有没有办法将链接源和目标值指定为节点名而不是索引

请注意,我试图基于类似json的链接呈现图形 链接:[{node1,node2},
{node1,node3}];不要指定索引等。

使用数组映射函数

var graph = {
  "nodes": [{
    "name": "User Login"
  }, {
    "name": "Appointments"
  }, {
    "name": "Store Visit"
  }, {
    "name": "Visit History"
  }, {
    "name": "Resume Store Visit"
  }],

  "links": [{
    "source": "Appointments",
    "target": "User Login",
    "value": 1
  }, {
    "source": "Store Visit",
    "target": "User Login",
    "value": 8
  }, {
    "source": "Visit History",
    "target": "User Login",
    "value": 10
  }, {
    "source": "Visit History",
    "target": "Store Visit",
    "value": 6
  }, {
    "source": "Resume Store Visit",
    "target": "User Login",
    "value": 1
  }]
};


graph.links = graph.links.map(function(l) {
    var sourceNode = graph.nodes.filter(function(n) {
        return n.name === l.source;
    })[0],
        targetNode = graph.nodes.filter(function(n) {
            return n.name === l.target;
        })[0];

    return {
        source: sourceNode,
        target: targetNode,
        value: l.value
    };
});
var-width=960,
高度=500;
var color=d3.scale.category20();
var-force=d3.layout.force()
。收费(-120)
.linkDistance(30)
.尺寸([宽度、高度]);
var svg=d3.选择(“正文”).追加(“svg”)
.attr(“宽度”,宽度)
.attr(“高度”,高度);
变量图={
“节点”:[{
“名称”:“用户登录”
}, {
“姓名”:“任命”
}, {
“名称”:“店铺参观”
}, {
“姓名”:“访问历史”
}, {
“名称”:“恢复店铺访问”
}],
“链接”:[{
“来源”:“任命”,
“目标”:“用户登录”,
“价值”:1
}, {
“来源”:“店铺参观”,
“目标”:“用户登录”,
“价值”:8
}, {
“来源”:“访问历史”,
“目标”:“用户登录”,
“价值”:10
}, {
“来源”:“访问历史”,
“目标”:“店铺访问”,
“价值”:6
}, {
“来源”:“恢复店铺访问”,
“目标”:“用户登录”,
“价值”:1
}]
};
graph.links=graph.links.map(函数(l){
var sourceNode=graph.nodes.filter(函数(n){
返回n.name==l.source;
})[0],
targetNode=graph.nodes.filter(函数(n){
返回n.name==l.target;
})[0];
返回{
来源:sourceNode,
目标:targetNode,
价值:l.value
};
});
力
.nodes(图.nodes)
.links(graph.links)
.start();
var link=svg.selectAll(“.link”)
.数据(图表.链接)
.enter().append(“行”)
.attr(“类”、“链接”)
.样式(“笔划宽度”,功能(d){
返回Math.sqrt(d.value);
});
var node=svg.selectAll(“.node”)
.数据(图.节点)
.enter().append(“圆”)
.attr(“类”、“节点”)
.attr(“r”,5)
.样式(“填充”,功能(d){
返色(d组);
})
.呼叫(强制拖动);
node.append(“标题”)
.文本(功能(d){
返回d.name;
});
force.on(“勾号”,函数(){
link.attr(“x1”,函数(d){
返回d.source.x;
})
.attr(“y1”,函数(d){
返回d.source.y;
})
.attr(“x2”,函数(d){
返回d.target.x;
})
.attr(“y2”,功能(d){
返回d.target.y;
});
node.attr(“cx”,函数(d){
返回d.x;
})
.attr(“cy”,函数(d){
返回d.y;
});
});
.node{
冲程:#fff;
笔划宽度:1.5px;
}
.链接{
行程:#999;
笔画不透明度:.6;
}

要求能够绘制包含json输入的图形,以链接作为节点名。@Vik是的,我知道。我在代码示例中使用了节点名作为源和目标<代码>“源”:“约会”、“目标”:“用户登录”
等@Vik也在代码段外添加了数据示例。您能否解释一下,我标记为重复的问题如何不能解决您想要做的事情?据我所知,这完全是一样的,只是你没有一个明确的ID字段。我很抱歉,因为我认为提供的解决方案是不正确的,所以我相信它不是重复的。它怎么不正确?正如我说的,我误解了代码哦,好的,我明白了。好吧:)