gpt4 book ai didi

javascript - D3 强制定向 JSON 邻接表

转载 作者:行者123 更新时间:2023-11-28 01:33:53 27 4
gpt4 key购买 nike

我有一个图邻接列表,如下所示:

{
nodes: [
{
"id": 1,
"label": "Mark
},...],

edges: [
{
"source": 1,
"target": 2
},....]
}

边使用节点的 id!

我一直在使用 PHP 将此列表回显到客户端。

D3 无法从文件加载我的 JSON。所以我尝试手动解析它:

var width = window.innerWidth,
height = window.innerHeight;

var color = d3.scale.category20();

var force = d3.layout.force()
.linkDistance(40)
.linkStrength(2)
.charge(-120)
.size([width, height]);

var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);

var nodes = [], links = [];

d3.json( null, function( error )
{
JSONData.nodes.forEach( function(node)
{
nodes.push( node );
});

JSONData.edges.forEach( function(edge)
{
links.push({source: edge.source, target: edge.target});
});

force.nodes(nodes)
.links(links)
.start();

var link = svg.selectAll(".link")
.data(links)
.enter().append("path")
.attr("fill", "none")
.attr("class", "link");

var node = svg.selectAll(".node")
.data(nodes)
.enter().append("circle")
.attr("class", "node")
.attr("r", 5)
.style("fill", "#4682B4" )
.call(force.drag);

node.append("title").text(function(d) { return d.label; });

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; });
});
});

但是,我只能看到节点,而看不到边缘。我添加了一个 CSS 文件:

.node {
stroke: #4682B4;
stroke-width: 1.5px;
}

.link {
stroke: #ddd;
stroke-width: 1.5px;
}

但是没有效果。有什么办法可以解决这个问题吗?

最佳答案

您需要使用:

      .enter().append("line")

而不是

      .enter().append("path")

(也许您还需要更改一些其他属性,以便它们对应于线,而不是路径)。

或者,您可以绘制一些更复杂的路径而不是直线,但我认为这对您的情况来说是一种矫枉过正。

编辑:

我刚刚发现两个相关且有趣的问题:

enter link description here - 描述了在力布局中显示链接时的另一种问题 - 确保您不会遇到类似的障碍

enter link description here - 如果你决定做类似的事情,一个人试图画曲线而不是直线

但希望这个答案和评论中的提示足以让你得到你想要的。

关于javascript - D3 强制定向 JSON 邻接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21771095/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com