<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>力向导图</title>
<style type="text/css">
.good {
font-size: 10px;
} svg {
display: block;
width: 800px;
height: 800px;
margin: 100px auto;
}
</style>
<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
</head>
<body>
<svg></svg> <script type="text/javascript">
var nodes = [{name: "桂林"}, {name: "广州"},
{name: "厦门"}, {name: "杭州"},
{name: "上海"}, {name: "青岛"},
{name: "天津"}]; var edges = [
{source: 0, target: 1}, {source: 0, target: 2},
{source: 0, target: 3}, {source: 0, target: 4},
{source: 0, target: 5}, {source:0, target: 6}];
var force = d3.layout.force()
.nodes(nodes) //指定节点数组
.links(edges) //指定连线数组
.size(['800', '600']) //指定作用域范围
.linkDistance(150) //指定连线长度
.charge([-400]); //相互之间的作用力
force.start()//开始作用;
console.log(nodes)//转换后的数据
console.log(edges)//转换后的数据
var svg = d3.select('svg')
// 绘制连接线
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里面的tick时间,每进行到一个时刻都要调用它,监听事件写在这里面就好
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;
});
})
</script>
</body>
</html>

d3实现的力向导图的更多相关文章

  1. Vue和d3.js(v4)力导向图force结合使用,v3版本升级v4【一】

    前段时间因为参与项目涉密,所以一直没有更新博客,有些博友给我私信或者留言要部分博文的源码,因为我的电脑更换,demo的源码没有备份 所以无法提供.大家可针对具体问题问我,有空我定会回复的.另外转发文章 ...

  2. 用Echarts的力向导图可视化数据

    学习背景:做一个图论的题目的时候需要将结果可视化来直观的看效果,所以使用Echarts来画.感觉效果不错. Echarts下载地址:https://echarts.baidu.com/download ...

  3. D3.js:力导向图

    var nodes = [ { name: "桂林" }, { name: "广州" }, { name: "厦门" }, { name: ...

  4. D3.js force力导向图用指定的字段确定link的source和target,默认是索引

    json.links.forEach(function (e) { var sourceNode = json.nodes.filter(function (n) { return n.name == ...

  5. D3力布图绘制--节点间的多条关系连接线的方法(转)

    在项目中遇到这样的场景,在使用D3.js绘制力布图的过程中,需要在2个节点间绘制多条连接线,找到一个不错的算法,在此分享下. 效果图: HTML中要连接 <!DOCTYPE html> & ...

  6. D3力布图绘制--基本方法

    本文主要结合案例记录使用D3.js绘制力布图的基本方法 样例显示 基本配置 this.force = d3.layout .force() .size([this.width, this.height ...

  7. D3.js 力导向图

    花了大半天看了一个八十几行的代码..心累 力导向图是之前就有画过很多次的东西,但是这次的代码看上去很陌生,然后发现是D3更新了4.0.... 先贴代码 var svg = d3.select(&quo ...

  8. D3.js 力导向图的制作

    力导向图中每一个节点都受到力的作用而运动,这种是一种非常绚丽的图表. 力导向图(Force-Directed Graph),是绘图的一种算法.在二维或三维空间里配置节点,节点之间用线连接,称为连线. ...

  9. D3.js系列——布局:饼状图和力导向图

    一.饼状图 在布局的应用中,最简单的就是饼状图. 1.数据 有如下数据,需要可视化: , , , , ]; 这样的值是不能直接绘图的.例如绘制饼状图的一个部分,需要知道一段弧的起始角度和终止角度,这些 ...

随机推荐

  1. Ucinet6 + Netdraw 根据excel文件绘制网络拓扑图

    条件: 具备Ucinet6 和 Netdraw 两款软件的Windows excel文件格式(.xlsx  .xls  .csv):必须是数字,如果现有的文件不是数字,可以采用某种编码的方式将其映射成 ...

  2. IdentityServer4目录

    一.介绍 二.快速入门 三.主题 四.端点 五.参考 IdentityServer4是ASP.NET Core 2的OpenID Connect和OAuth 2.0框架. 它可以在您的应用程序中启用以 ...

  3. dns 安全

    域名系统组织架构 DNS是全球互联网中最重要的基础服务之一,也是如今唯一的一种有中心点的服务.全球域名系统组织与管理架构如下图所示: ICANN  互联网名称与数字地址分配机构(The Interne ...

  4. BZOJ.3425.[POI2013]Polarization(DP 多重背包 二进制优化)

    BZOJ 洛谷 最小可到达点对数自然是把一条路径上的边不断反向,也就是黑白染色后都由黑点指向白点.这样答案就是\(n-1\). 最大可到达点对数,容易想到找一个点\(a\),然后将其子树分为两部分\( ...

  5. 潭州课堂25班:Ph201805201 WEB 之 JS 第五课 (课堂笔记)

    算数运算符 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  6. 潭州课堂25班:Ph201805201 第七课:控制流程 (课堂笔记)

    # 条件判断 s = '储蓄卡' if s == '男': # 如果if 表达式成立 ,则执行下级语句 print('男性') elif s == '女': # 如果上面表达式不成立,执行本次判断,本 ...

  7. [模板][P3377]左偏树

    Description: 一开始有N个小根堆,每个堆包含且仅包含一个数.接下来需要支持两种操作: 操作1: 1 x y 将第x个数和第y个数所在的小根堆合并(若第x或第y个数已经被删除或第x和第y个数 ...

  8. Linux 标准目录结构 FHS

    因为利用 Linux 来开发产品或 distribution 的团队实在太多了,如果每个人都用自己的想法来配置文件放置的目录,那么将可能造成很多管理上的困扰.所以,后来就有了 Filesystem H ...

  9. 【织梦dedecms系统安全】完善DEDECMS目录的权限安全设置

    [织梦dedecms系统安全]完善DEDECMS目录的权限安全设置:   ../ [站点上级目录]   如果要使用后台的目录相关的功能需要有列出目录的权限     / [站点根目录]   需要执行和读 ...

  10. UIView的层次结构–code

    转:http://blog.dongliwei.cn/archives/uiview-tree-code // Recursively travel down the view tree, incre ...