本人的个人博客为:www.ourd3js.com
csdn博客为:blog.csdn.net/lzhlzz
转载请注明出处,谢谢。
打包图( Pack ),用于包含与被包含的关系,也表示各个对象的权重,通常用一圆套一圆来表示前者,用圆的大小来表示后者。
先看本节所使用的数据: city2.json
这是各城市所属关系的数据。我们现在要用 D3 的 layout 来转换数据,使其容易进行可视化处理。
var pack = d3.layout.pack() .size([ width, height ]) .radius(20);上面定义了 pack 函数,size() 是转换后数据的尺寸,即转换后顶点的(x,y),都会在这个 size 范围内。radius 是用于设定转换后最小的圆的半径。接下来要读取 json 文件,并将文件内容提供给 pack 函数,用于转换数据。
d3.json("city2.json", function(error, root) { var nodes = pack.nodes(root); var links = pack.links(nodes); console.log(nodes); console.log(links); }上面用 pack 分别将数据转换成了顶点 nodes 和 连线 links,后面两句话的 console.log 用于输出转换后的数据。我们来看看数据被转换成了什么样。
svg.selectAll("circle") .data(nodes) .enter() .append("circle") .attr("fill","rgb(31, 119, 180)") .attr("fill-opacity","0.4") .attr("cx",function(d){ return d.x; }) .attr("cy",function(d){ return d.y; }) .attr("r",function(d){ return d.r; }) .on("mouseover",function(d,i){ d3.select(this) .attr("fill","yellow"); }) .on("mouseout",function(d,i){ d3.select(this) .attr("fill","rgb(31, 119, 180)"); });这是绘制圆的代码,看过前面几节的朋友一定已经很熟悉了吧。
【 D3.js 入门系列 --- 9.6 】 打包图的制作,布布扣,bubuko.com
原文地址:http://blog.csdn.net/lzhlzz/article/details/38701301