【D3.js数据可视化系列教程】(三十六)-- 冰柱图
2013-12-06 07:29
751 查看
1. 冰柱图简介
冰柱图使用D3的分区布局实现,主要用来展现数据的层次和包含关系。实际上使用笛卡尔排列的分区布局数据绘制的就是冰柱图,径向排列就是旭日图。下图给出的是笛卡尔排列方式。2. 冰柱图示例
3. 实现冰柱图
(1) 定义冰柱图布局var partition = d3.layout.partition()//递归分割节点树到一个旭日或冰柱。 .size([width, height])//在x和y指定的布局大小。 .value(function(d) { return d.size; });(2) 用冰柱图布局转换数据
var nodes = partition.nodes(root);//计算分区布局并返回节点的数组。(3) 绑定新数据添加节点和文字
略。详见代码~
4. 完整代码
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title>testD3-34-icicle.html</title>
<style>
.node {
fill: #ddd;
stroke: #fff;
}
.label {
font: 10px sans-serif;
text-anchor: middle;
}
</style>
</head>
<body>
<script src="d3.js" charset="utf-8" ></script>
<script>
var width = 960,
height = 500;
var color = d3.scale.category20();
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
// (1)冰柱布局
var partition = d3.layout.partition()//递归分割节点树到一个旭日或冰柱。 .size([width, height])//在x和y指定的布局大小。 .value(function(d) { return d.size; });
d3.json("Icicle.json", function(error, root) {
// (2) 用冰柱图布局转换数据
var nodes = partition.nodes(root);//计算分区布局并返回节点的数组。
// (3) 设置文字和节点
svg.selectAll(".node")
.data(nodes)
.enter().append("rect")
.attr("class", "node")
.attr("x", function(d) { return d.x; })
.attr("y", function(d) { return d.y; })
.attr("width", function(d) { return d.dx; })
.attr("height", function(d) { return d.dy; })
.style("fill", function(d) { //颜色:有孩子则返回自己的颜色,无孩子则返回爸爸的颜色
return color((d.children ? d : d.parent).name);
});
svg.selectAll(".label")
.data(nodes.filter(function(d) {
return d.dx > 6;
}))
.enter().append("text")
.attr("class", "label")
.attr("dy", ".35em")
.attr("transform", function(d) {
return "translate(" + (d.x + d.dx / 2) + "," + (d.y + d.dy / 2) + ")rotate(90)";
})
.text(function(d) { return d.name; });
});
</script>
</body>
5. 数据:Icicle.json
{ "name": "AAA", "children": [ { "name": "BBB", "children": [ { "name": "CCC", "children": [ { "name": "DDD", "children": [ { "name": "EEE", "size": 73 }, { "name": "EEE", "size": 73 }, { "name": "EEE", "size": 73 }, { "name": "EEE", "size": 73 }, { "name": "EEE", "size": 73 }, { "name": "EEE", "size": 73 }, { "name": "EEE", "size": 73 }, { "name": "EEE", "size": 73 }, { "name": "EEE", "size": 73 }, { "name": "EEE", "size": 73 }, { "name": "EEE", "size": 73 }, { "name": "EEE", "size": 73 }, { "name": "EEE", "size": 73 }, { "name": "EEE", "size": 73 }, { "name": "EEE", "size": 73 }, { "name": "EEE", "size": 73 } ] }, { "name": "DDD", "size": 73 }, { "name": "DDD", "size": 39 }, { "name": "DDD", "size": 67 }, { "name": "DDD", "size": 73 }, { "name": "DDD", "size": 39 }, { "name": "DDD", "size": 67 }, { "name": "DDD", "size": 73 }, { "name": "DDD", "size": 39 }, { "name": "DDD", "size": 67 }, { "name": "DDD", "size": 73 }, { "name": "DDD", "size": 39 }, { "name": "DDD", "size": 67 }, { "name": "DDD", "size": 73 }, { "name": "DDD", "size": 39 }, { "name": "DDD", "size": 67 }, { "name": "DDD", "size": 73 } ] }, { "name": "CCC", "size": 67 }, { "name": "CCC", "size": 73 }, { "name": "CCC", "size": 39 }, { "name": "CCC", "size": 67 }, { "name": "CCC", "size": 73 }, { "name": "CCC", "size": 39 }, { "name": "CCC", "size": 67 }, { "name": "CCC", "size": 73 }, { "name": "CCC", "size": 39 }, { "name": "CCC", "size": 67 }, { "name": "CCC", "size": 73 }, { "name": "CCC", "size": 39 }, { "name": "CCC", "size": 67 }, { "name": "CCC", "size": 73 }, { "name": "CCC", "size": 39 }, { "name": "CCC", "size": 67 }, { "name": "CCC", "size": 73 } ] }, { "name": "BBB", "size": 39 }, { "name": "BBB", "size": 67 }, { "name": "BBB", "size": 73 } ] }
相关文章推荐
- 【D3.js数据可视化系列教程】--(十一)散点图
- 【D3.js数据可视化系列教程】(二十九)--折叠树
- 【D3.js数据可视化系列教程】(十九)--交互图表之鼠标悬停
- 【D3.js数据可视化系列教程】--(一)简介
- 【D3.js数据可视化系列教程】--(十二)比例尺
- 【D3.js数据可视化系列教程】(二十五)--加载csv文件
- 【D3.js数据可视化系列教程】(二十七)--径向树
- 【D3.js数据可视化系列教程】(二十八)--弦图
- 【D3.js数据可视化系列教程】(三十五)-- 矩形树
- 【D3.js数据可视化系列教程】--(二)最简单的开始:添加元素
- 【D3.js数据可视化系列教程】--(十三)坐标轴
- 【D3.js数据可视化系列教程】(十六)--更新、过度和动画
- 【D3.js数据可视化系列教程】(二十六)--加载SVG文件
- 【D3.js数据可视化系列教程】(三十)--力导向图之带文字
- 【D3.js数据可视化系列教程】(三十四)-- sankey图
- 【D3.js数据可视化系列教程】--(三)数据绑定
- 【D3.js数据可视化系列教程】(二十一)--交互图表之条形图排序切换
- 【D3.js数据可视化系列教程】(三十二)-- 力导向图之弧形箭头连线
- 【D3.js数据可视化系列教程】--(十五)SVG基本图形绘制
- 【D3.js数据可视化系列教程】(二十二)--交互图表之提示条