【D3.js 学习总结】12、D3布局-集群图

d3.layout.cluster()

集群图是一种用于表示包含与被包含关系的图表。

集群图(Cluster)的API说明

  • cluster.children - 取得或者设置子节点的访问器函数。
  • cluster.links - 技术树节点之间的父子连接。
  • cluster.nodeSize - 为每个节点指定固定的尺寸。
  • cluster.nodes - 计算集群布局并返回节点数组。
  • cluster.separation - 取得或设置邻接节点的分隔函数。
  • cluster.size - 取得或设置布局的尺寸。
  • cluster.sort - 取得或设置兄弟节点的比较器函数。
  • cluster - cluster.nodes的别名。

我们通过一个制作一个集群图来讲解集群布局。

1. 数据

var dataset = {
    "name": "中国",
    "children": [{
            "name": "浙江",
            "children": [{"name": "杭州"}, {"name": "宁波"}, {"name": "温州"}, {"name": "绍兴"}]
        },

        {
            "name": "广西",
            "children": [{"name": "桂林"}, {"name": "南宁"}, {"name": "柳州"}, {"name": "防城港"}]
        },

        {
            "name": "黑龙江",
            "children": [{"name": "哈尔滨"}, {"name": "齐齐哈尔"}, {"name": "牡丹江"}, {"name": "大庆"}]
        },

        {
            "name": "新疆",
            "children": [{"name": "乌鲁木齐"}, {"name": "克拉玛依"}, {"name": "吐鲁番"}, {"name": "哈密"}]
        }
    ]
}

2. 数据转换

var width = 1000,
    height = 500;

var cluster = d3.layout.cluster()
    .size([width, height - 100]);

var nodes = cluster.nodes(dataset); // 节点
var links = cluster.links(nodes); // 连线

size() 设定尺寸,即转换后的各节点的坐标在哪一个范围内。

通过集群布局转换数据后,数据被转换成如下形式:

节点

连线

3. 绘制图形

生成SVG容器

var svg = d3.select("body").append("svg")
    .attr("width", width)
    .attr("height", height)
    .append("g")
    .attr("transform", "translate(0,50)");

创建对角线SVG生成器

var diagonal = d3.svg.diagonal()

生成连线路径

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

生成圆形节点和文本

var node = svg.selectAll(".node")
    .data(nodes)
    .enter()
    .append("g")
    .attr("class", "node")
    .attr("transform", function(d) {
        return "translate(" + d.x + "," + d.y + ")";
    })
node.append("circle")
    .attr("r", 4.5);

node.append("text")
    .attr("dx", function(d) {
        return d.children ? -8 : 8;
    })
    .attr("dy", 3)
    .style("text-anchor", function(d) {
        return d.children ? "end" : "start";
    })
    .text(function(d) {
        return d.name;
    });

查看在线演示

时间: 2024-10-28 10:56:04

【D3.js 学习总结】12、D3布局-集群图的相关文章

【D3.js 学习总结】8、D3布局介绍

布局是 D3 中一个十分重要的概念,可以理解成 "制作常见图形的函数",有了它制作各种相对复杂的图表就方便多了. D3 与其它很多可视化工具不同,相对来说较底层,对初学者来说不太方便,但是一旦掌握了,就比其他工具更加得心应手. 下图展示了 D3 与其它可视化工具的区别: 布局的作用是:将不适合用于绘图的数据转换成了适合用于绘图的数据. D3 总共提供了 12 个布局: 饼状图(Pie) 力导向图(Force) 弦图(Chord) 捆图(Bundle) 直方图(Histogram) 堆栈

【D3.js 学习总结】20、D3布局-捆图

d3.layout.bundle() 下图是航班查询网站全球航班雷达(FlightRadar24)显示的今日长三角地区的飞机飞行图: 图中我们能看到每时每刻有多少飞行在我们头上飞,有北京-杭州.杭州-日本.上海-北京的航班等等,如果你想知道哪个机场最繁忙,那就可以用到捆图来展现了: 捆图(Bundle)是D3布局中即简单又复杂的一种布局方式,说简单,它只有2个函数来实现数据转换,说复杂,它的实现需要结合其它层级布局来实现,如:集群图.打包图.分区图.树状图.矩阵树图.最常见的是与集群图一起使用,

【D3.js 学习总结】13、D3布局-树状图

d3.layout.tree() 树状图( Tree )用于表示层级.上下级.包含与被包含关系,其布局的用法与集群图几乎完全相同,本章简单通过两个图的对比来讲述两种图表之间的不同之处. 树状图 集群图 查看在线演示

【D3.js 学习总结】4、D3 创建SVG

D3图表大都是由SVG来实现的,所以在继续学习前需要了解一些SVG的知识,可以通过看svg教程来学习一下. D3可以生成一般的SVG形状,它也内置了很多SVG图表,方便我们直接生成实用的图表. 我们先来创建一个SVG容器,其它SVG图形都需要在容器里来创建: var body = d3.select('body'); var svg = body.append('svg').attr('width',200).attr('height',200); 普通SVG 用D3来生成一般的SVG图形,可以

【D3.js 学习总结】1、初识D3

D3是指数据驱动文档(Data-Driven Documents),根据D3的官方定义: D3.js是一个JavaScript库,它可以通过数据来操作文档.D3可以通过使用HTML.SVG和CSS把数据鲜活形象地展现出来.D3严格遵循Web标准,因而可以让你的程序轻松兼容现代主流浏览器并避免对特定框架的依赖.同时,它提供了强大的可视化组件,可以让使用者以数据驱动的方式去操作DOM.----D3维基(2013年8月) 从一个Hello Wordld示例来看看d3如何运行 点击查看在线DEMO fu

【D3.js 学习总结】21、D3交互事件

前20节中,我们讲了各种静态D3图表的制作,好的图表应该是要与用户进行互动的,这节来讲讲D3的交互事件: d3.event selection选择器事件监听的写法跟平时我们用的jQuery类似,如: selection.on('click',function(d,i){ alert('ok'); }) 但请注意,点击事件触发的匿名函数参数不是我们常用的e或event,而是绑定在选择器上的数据d和数据的序列号i,这点非常重要. 注册事件 我们只要调用全局对象d3.event,它是DOM事件,并实现

Hadoop 学习第三天之集群安装(上)

Hadoop 学习之集群安装(上) 将配置的伪分布模式的虚拟机克隆两份并更名为centos_node2和centos_note3 分别打开三个虚拟机,第一个基本不需要配置了,现在主要配置centos_note2和centos_note3的配置. 1.   首先修改IP地址和主机名 因为centos是hadoop1和192.168.100.11,在这里设置centos_note2和centos_note3的主机名和IP地址分别为:hadoop2/192.168.100.12和hadoop3/192

一脸懵逼学习基于CentOs的Hadoop集群安装与配置(三台机器跑集群)

1:Hadoop分布式计算平台是由Apache软件基金会开发的一个开源分布式计算平台.以Hadoop分布式文件系统(HDFS)和MapReduce(Google MapReduce的开源实现)为核心的Hadoop为用户提供了系统底层细节透明的分布式基础架构.  注意:HADOOP的核心组件有: 1)HDFS(分布式文件系统) 2)YARN(运算资源调度系统) 3)MAPREDUCE(分布式运算编程框架)       Hadoop 中的分布式文件系统 HDFS 由一个管理结点 ( NameNode

基于docker1.12创建swarm集群

       Docker 1.12 在 2016 年 7 月 28 日正式 GA,除了大量的在使用上的改进和 bug 修复外,最引人瞩目的是Docker原生支持了 Swarm 模式,而不是将Swarm作为一个容器对集群进行管理. 而docker1.12的操作命令并不向下兼容,于是过去所有创建swarm集群的文档都不能参考了,本文描述了基于docker1.12版本创建Swarm集群的过程. 1.主机环境 在阿里云上申请三个vpc网络的ECS,安装centos7.0的镜像,ip和角色分配如下: 1