d3数据可视化----CSV&JSON


D3是JavaScript的数据可视化库(http://d3js.org/),参考《数据可视化实战--使用D3设计交互式图表》

源码位于:https://github.com/mbostock/d3/wiki

之前都没有接触过库可以绘制交互图,初次接触D3是出于绘制填充树图。


{
     "name": "cluster",
     "children": [
      {"name": "AgglomerativeCluster", "size": 4},
       {"name": "CommunityStructure", "size": 2},
      {"name": "MergeEdge", "size": 2}
     ]
  }
上述文件是JSON串的形式

遇到的主要问题

1、原数据不是JSON格式,而是Excel格式,Excel可以转换为CSV格式,如何实现CSV到JSON。

2、不熟悉d3库的函数

3、数据的读取,对象数组的初次使用


一开始想到两个方案:

1、CSV格式读入,然后转换写入到JSON文件中。数据就可以直接读取JSON串

2、CSV格式读入后存储为JSON的数据格式,即存到数组中。

CSV 文件:

TYPE
  a
  b
  c
  a
  d
  b


CSV的读取:1、读取的CSV数据进行统计  2、CSV的读取是异步的,因此需要完成的操作都要在函数内部


d3.csv("resources/ff.csv",function(error,csv){
           var TypeName=[{}];

           var nest=d3.nest()
		     .key(function(d){return d.TYPE;})
		     .entries(csv);

           for(var i=0;i<nest.length;i++)
		   { 
			   TypeName[i]={"name":nest[i].key,"size":nest[i].values.length};     
		   }
          var root = {"name":"root", "children":[{}]};

	      TypeName.forEach(function(d){
		    if(typeof root.children[d.name] !== 'undefined') {
				root.children[d.name].children.push(d);
			 
				} else {	
					root.children[d.name] = {"name": d.name, "children": [d]};
				 }
			});
		root.children= Object.keys(root.children).map(function (key) { return root.children[key]; });
 <pre name="code" class="plain">    div.selectAll(".node")
      .data(treemap.nodes(root))//计算树形布局和返回节点的数组。
       .enter().append("div")
      .attr("class", "node")
      .style("left", function(d) { return d.x + "px"; })
      .style("top", function(d) { return d.y + "px"; })
      .style("width", function(d) { return Math.max(0, d.dx - 1) + "px"; })
      .style("height", function(d) { return Math.max(0, d.dy - 1) + "px"; })
      
      .style("background", function(d) { //只为有孩子的节点赋值,也就是说叶子节点的背景颜色都是他爸爸的颜色
      	return d.children ? color(d.name) : null; 
      })
      .text(function(d) { //同理,孩子设置文字,爸爸没有
      	return d.children ? null : d.name; 
      });
});



JSON串读取

d3.json("path/1.json",function(error,json){
       console.log(json);
});



总结:

  本想存储JSON文本再读取,可是写入文本的代码。。。脚本里面可以嵌套Java代码???  

   JavaScript还很不熟悉呀,简单的应用花费大量时间,有些地方貌似还是有点问题

    可视化之路其慢慢修远兮~~~~~~~~~暂且这样吧

    

参考资料:http://codego.net/570269/

                   http://blog.csdn.net/tianxuzhang/article/details/17151479

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章