在html中添加力导向图,基于D3.js实现的力导向图

这篇博客展示了如何利用D3.js库来构建一个力导向图。代码中定义了节点(nodes)和边(edges),设置了图形的大小、连线长度和节点间的相互作用力。在每次时间间隔中,更新了节点、连线和文字的位置,实现了一个动态的网络图,用于展示桂林、广州、厦门等城市之间的关系。
摘要由CSDN通过智能技术生成

HTML

导入代码模板:

力导向图

var nodes = [{

name: "桂林"

}, {

name: "广州"

}, {

name: "厦门"

}, {

name: "杭州"

}, {

name: "上海"

}, {

name: "青岛"

}, {

name: "天津"

}];

var edges = [{

source: 0,

target: 1

}, {

source: 0,

target: 2

}, {

source: 0,

target: 3

}, {

source: 1,

target: 4

}, {

source: 1,

target: 5

}, {

source: 1,

target: 6

}];

var width = 400;

var height = 400;

var svg = d3.select("body")

.append("svg")

.attr("width", width)

.attr("height", height);

var force = d3.layout.force()

.nodes(nodes) //指定节点数组

.links(edges) //指定连线数组

.size([width, height]) //指定范围

.linkDistance(150) //指定连线长度

.charge(-400); //相互之间的作用力

force.start(); //开始作用

console.log(nodes);

console.log(edges);

//添加连线

var svg_edges = svg.selectAll("line")

.data(edges)

.enter()

.append("line")

.style("stroke", "#ccc")

.style("stroke-width", 1);

var color = d3.scale.category20();

//添加节点

var svg_nodes = svg.selectAll("circle")

.data(nodes)

.enter()

.append("circle")

.attr("r", 20)

.style("fill", function(d, i) {

return color(i);

})

.call(force.drag); //使得节点能够拖动

//添加描述节点的文字

var svg_texts = svg.selectAll("text")

.data(nodes)

.enter()

.append("text")

.style("fill", "black")

.attr("dx", 20)

.attr("dy", 8)

.text(function(d) {

return d.name;

});

force.on("tick", function() { //对于每一个时间间隔

//更新连线坐标

svg_edges.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;

});

//更新节点坐标

svg_nodes.attr("cx", function(d) {

return d.x;

})

.attr("cy", function(d) {

return d.y;

});

//更新文字坐标

svg_texts.attr("x", function(d) {

return d.x;

})

.attr("y", function(d) {

return d.y;

});

});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值