当前位置: 首页 > news >正文

d3生成的树状图

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>树形图(集群图)</title>
 6     <script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
 7     <style>
 8         svg{
 9             display: block;
10             width: 1000px;
11             height: 800px;
12             margin: 100px auto;
13         }
14         path.link{
15             stroke: #333;
16             stroke-width: 1.5px;
17             fill:transparent;
18         }
19         .node circle{
20             fill:#fff;
21             stroke:steelblue;
22             stroke-width: 1.5px;
23         }
24     </style>
25 </head>
26 <body>
27 <!--数据一共3级-->
28 <svg></svg>
29 </body>
30 </html>
31 <script>
32 
33     var tree = d3.layout.tree()
34         .size([600, 400])//设定尺寸,即转换后的各个节点的坐标在哪一个范围内;
35         .separation(function (a, b) {//设置节点之间的间隔;
36             return (a.parent == b.parent ? 1 : 2)
37         });
38     // 转换数据
39     d3.json('tree.json',function (error,root) {//root是读入的数据;
40         var nodes = tree.nodes(root);
41         var links = tree.links(nodes);
42         console.log(nodes)//nodes中有各个节点的子节点(children),深度(depth),名称(name).位置(x,y)信息;其中name是json文件中的属性
43         console.log(links)//links中有连线两端(source,target)的节点信息;
44         // 绘制
45         // d3.svg.diagonal()是一个对角线生成器,只要输入两个顶点坐标,即可生成一条贝塞尔曲线
46         // 创建一个对角线生成器
47         var diagonal = d3.svg.diagonal()
48             .projection(function(d){return [d.y,d.x]})//projection()是一个点变换器,默认是【d.x,d.y】,即保持原坐标不变,如果写成 [ d.y , d.x ] ,即是说对任意输入的顶点,都交换 x 和 y 坐标。
49         var svg = d3.select('svg')
50             .append('g')//不加这个g的时候,中国两个字出不来;
51             .attr("transform", "translate(140,0)");
52         // 绘制连线方法
53         var link = svg.selectAll('.link')
54             .data(links)
55             .enter()
56             .append('path')
57             .attr('class','link')
58             .attr('d',diagonal)
59         var node = svg.selectAll('.node')
60             .data(nodes)
61             .enter()
62             .append('g')
63             .attr('class','node')
64             .attr('transform',function (d) {
65                 return "translate(" + d.y + "," + d.x + ")";
66             })
67         node.append('circle')
68             .attr('r',4.5)
69         node.append('text')
70             .attr("dx", function(d) { return d.children ? -8 : 8; })
71             .attr("dy", 3)
72             .style("text-anchor", function(d) { return d.children ? "end" : "start"; })
73             .text(function(d) { return d.name; });
74     })
75 
76 </script>

 

转载于:https://www.cnblogs.com/yangguoe/p/10309420.html

相关文章:

  • Tushare模块
  • 详解Oracle partition分区表
  • centos配置NTP服务器
  • 跟我一起学机器学习:机器学习常用流程-1
  • [Leetcode] 寻找数组的中心索引
  • nginx部署成功却没有办法访问
  • 进程管理
  • S:List
  • CLOUD常用表
  • 【题解】Luogu P2766 最长不下降子序列问题
  • FBO中多重采样抗锯齿(MSAA MultiSampling Anti-Aliasing)
  • java序列化
  • 记利用frp配合nginx实现内网透传
  • 一本通1554【例 3】异象石
  • codeforces 140E.New Year Garland
  • 【译】JS基础算法脚本:字符串结尾
  • 【Amaple教程】5. 插件
  • 【前端学习】-粗谈选择器
  • CSS相对定位
  • gf框架之分页模块(五) - 自定义分页
  • HTTP请求重发
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • JAVA 学习IO流
  • Java|序列化异常StreamCorruptedException的解决方法
  • LeetCode算法系列_0891_子序列宽度之和
  • Object.assign方法不能实现深复制
  • ReactNative开发常用的三方模块
  • 产品三维模型在线预览
  • 力扣(LeetCode)21
  • 码农张的Bug人生 - 见面之礼
  • 使用SAX解析XML
  • 一些关于Rust在2019年的思考
  • 自定义函数
  • 06-01 点餐小程序前台界面搭建
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​520就是要宠粉,你的心头书我买单
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • # centos7下FFmpeg环境部署记录
  • # 计算机视觉入门
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • $(selector).each()和$.each()的区别
  • (06)金属布线——为半导体注入生命的连接
  • (27)4.8 习题课
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (笔试题)分解质因式
  • (二)c52学习之旅-简单了解单片机
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (简单) HDU 2612 Find a way,BFS。
  • (三)uboot源码分析
  • ****Linux下Mysql的安装和配置
  • ***详解账号泄露:全球约1亿用户已泄露
  • **CI中自动类加载的用法总结
  • .aanva
  • .htaccess配置重写url引擎