【发布时间】:2017-04-29 08:29:28
【问题描述】:
CODEPEN:
https://codepen.io/anon/pen/OmpYoL
情况:
目前正在学习D3,试图创建一个力有向图。
我遵循了这个教程:
http://www.puzzlr.org/force-directed-graph-minimal-working-example/
数据如下:
https://raw.githubusercontent.com/DealPete/forceDirected/master/countries.json
代码:
<script type="text/javascript">
d3.json("https://raw.githubusercontent.com/DealPete/forceDirected/master/countries.json", function(error, json) {
if (error) {
return console.warn(error);
}
const data = json;
const nodes = data.nodes;
const links = data.links;
const margin = {
top: 10,
right: 85,
bottom: 65,
left: 70
}
const w = 1250 - margin.left - margin.right;
const h = 500 - margin.top - margin.bottom;
const svg = d3.select("#results")
.append("svg")
.attr("width", w + margin.left + margin.right)
.attr("height", h + margin.top + margin.bottom);
const simulation = d3.forceSimulation()
.nodes(nodes);
simulation
.force("charge_force", d3.forceManyBody())
.force("center_force", d3.forceCenter(w / 2, h / 2));
const node = svg.append("g")
.attr("class", "nodes")
.selectAll("circle")
.data(nodes)
.enter()
.append("circle")
.attr("r", 5)
.attr("fill", "red");
const link_force = d3.forceLink(links)
simulation.force("links",link_force)
const link = svg.append("g")
.attr("class", "links")
.selectAll("line")
.data(links)
.enter().append("line")
.attr("stroke-width", 2);
simulation.on("tick", tickActions());
function tickActions() {
node
.attr("cx", function(d) { return d.x; })
.attr("cy", function(d) { return d.y; });
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; });
}
});
</script>
【问题讨论】:
-
你会做小提琴吗?
-
@bumbeishvili 确定!
-
@bumbeishvili 问题已更新!
标签: javascript d3.js