【D3.js 学习总结】25、D3几何 - 凸包

d3.geom.hull

hull函数用于计算指定坐标点的外围边界,用一个场景来描述,某片草原上有100只羊在不同的位置,我们需要将羊群所在的草场圈起来,那只要将羊群最外围的羊通过一根线连起来就可以实现,同理,hull就是用来计算这个外围边界的方法;

通过一个示例来展示。

1、数据,随机生成100只羊的坐标

var width = 500;
var height = 500;

var randomX = d3.random.normal(width / 2, 60);
var randomY = d3.random.normal(height / 2, 60);
var dataset = d3.range(100).map(function() {
  return [randomX(), randomY()];
});

2、数据转换

var data = d3.geom.hull(dataset);

转换前的数据,如图所示:

转换后的数据,只保留了边界上的点,如图所示:

3、绘制图形

生成SVG容器

var svg = d3.select("body").append("svg")
    .attr("width", width)
    .attr("height", height);

生成羊群边界路径,注意这里用的是datum方法,因为这里不需要遍历数据

var hull = svg.append("path")
    .datum(data)
    .attr({
      d: function(d){
        return 'M'+ d.join('L') +'Z';
      },
      fill: 'steelblue',
      stroke: '#000',
    });

生成羊群坐标点,注意这里的数据是原始坐标数据dataset

var circle = svg.selectAll('circle')
  .data(dataset)
  .enter()
  .append('circle')
  .attr({
    r: 3,
    fill: '#fff',
    stroke: '#000',
    cx: function(d){
      return d[0];
    },
    cy: function(d){
      return d[1];
    }
  })

查看在线演示

时间: 2024-09-12 23:48:31

【D3.js 学习总结】25、D3几何 - 凸包的相关文章

【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事件,并实现

【D3.js 学习总结】24、D3几何 - 多边形 

d3.geom.polygon polygon函数有3个用途: polygon.area() 用来计算多边形面积: polygon.centroid() 用来计算多边形中心坐标: polygon.clip(subject) 用来处理2个多边形重叠时,返回重叠区域多边形,用来剪切的多边形需要是逆时针方向且是凸多边形: 通过一个示例来展示. 1.数据 // dataset0 用来做裁切主体,它的坐标需要是逆时针方向 var dataset0 = [[100,100],[100,300],[300,3

【D3.js 学习总结】22、D3几何 - 泰森多边形

d3.geom.voronoi() 在日常生活中有这样的场景,在一个城市中有很多的便利店,当你走在城市的任意地方,怎么才能找到离你了近的便利店呢?这种场景就适合用泰森多边形来解决. 通过一个示例来展示. 1.数据 var dataset = [[18,162], [114,403], [261,98] ]; //假设这是三家便利店 2.数据转换 var width = 500; var height = 500; var voronoi = d3.geom.voronoi() .clipExte

【D3.js 学习总结】23、D3几何 - 四叉树

d3.geom.quadtree 四叉树也被称为Q树(Q-Tree).四叉树广泛应用于图像处理.空间数据索引.2D中的快速碰撞检测.存储稀疏数据等,对游戏编程,这会很有用. 四叉树(Q-Tree)是一种树形数据结构.四叉树的定义是:它的每个节点下至多可以有四个子节点,通常把一部分二维空间细分为四个象限或区域并把该区域里的相关信息存入到四叉树节点中. 四叉树的每一个节点代表一个矩形区域(如上图黑色的根节点代表最外围黑色边框的矩形区域),每一个矩形区域又可划分为四个小矩形区域,这四个小矩形区域作为四

【D3.js 学习总结】26、D3地理地图

d3.geo 在学习D3如何制作地图前,我们需要了解下地图的数据格式geoJSON,GeoJSON是一种对各种地理数据结构进行编码的格式,基于Javascript对象表示法的地理空间信息数据交换格式. 本节我们将制作一幅中国地图,使用到的地图数据文件是从 Natural Earth 上的获取,经过提取后制作而成的,在本节入门篇中不细述地图数据的获取过程,将直接使用已经做好的数据,可通过以下链接下载查看中国地图数据. China GeoJSON 1.加载数据 d3.json('geoChina.j

【D3.js 学习总结】5、D3 SVG图表示例

之前有说到"D3制作图表的过程就是将各种SVG图形拼接在一起的过程",具体来说折线图表就是折线图+坐标轴的组合,面积图是折线图+坐标轴+面积图 一个完整的SVG图表,是包含了各种数据.SVG图形.样式.交互组成的组合体,我们以面积图表来做一个示例展示: CSS svg{ font-size: 12px; } .line{ fill:none; stroke-width:1; stroke:#000; } .axis line{ stroke: #000; stroke-width: 1

【D3.js 学习总结】10、D3布局-力学图

d3.layout.force() 力学图(也称为导向图,也有叫网络拓补图的,反正就是通过排斥得到关系远近的结构)在社交网络研究.信息传播途径等群体关系研究中应用非常广泛,它可以直观地反映群体与群体之间联系的渠道.交集多少,群体内部成员的联系强度等. 力学(Force)的API说明 force.on - 监听布局位置的变化.(仅支持"start","step","end"三种事件) force.nodes - 获得或设置布局中的节点(node)阵