We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
这里的D3,首先不是尼康相机也不是暗黑破坏神3更不是维生素。
摘自数据可视化实战:使用D3设计交互式图表
D3(有时候也叫D3或d3.js)是一个JavaScript库,用于创建数据可视化图形。 事实上,D3是一个缩写,它的全称叫Data-Driven Documents(数据驱动的文档)。 数据来源于你,而文档就是基于Web的文档(或者网页),代表可以在浏览器中展现的一切, 比如HTML、SVG。D3扮演的是一个驱动程序的角色,因为它联系着数据和文档。
angular.module('viz').directive('toptagChart', ['lastfm', function (lastfm) { var link = function ($scope, $el, $attrs) { //定义大小 var diameter = 500; //使用pack布局,关于pack你可以查看D3 API var bubble = d3.layout.pack() .sort(null) .size([diameter, diameter]) .padding(2.5); //创建svg元素,并定义大小 var svg = d3.select($el[0]).append("svg") .attr({width: diameter, height: diameter}) .attr("viewBox", "0 0 " + diameter + " " + diameter); //追加g元素 var chart = svg.append("g"); //追加text元素,显示loading chart.append("text").attr("id", "loading") .text("Loading...") .attr("transform", "translate(200,250)"); var update = function () { var data = $scope.toptags.map(function (d) { d.value = d[$scope.tagsize]; return d; }); //将数据塞入pack布局中,pack布局会 //自动帮我们计算坐标和bubble的半径大小根据value bubble.nodes({children: data}); //data如果有数据,删除text元素 if (data.length) chart.select("#loading").remove(); //选取所有class为node元素 //很多人很奇怪,为啥元素没有创建,却要去选取 //这就是D3的特点,通过下面的enter()方法先占位 //enter(), 这个方法会分析当前选择的DOM 元素和传给它的数据, //如果数据值比对应的DOM 元素多,就创建一个新的占位元素。 //然后把这个新占位元素的引用交给链中的下一个方法 var selection = chart.selectAll(".node") .data(data); //enter方法占位,追加g元素,并添加node class var enter = selection.enter() .append("g").attr("class", "node") .attr("transform", function (d) { return "translate(" + d.x + "," + d.y + ")"; }); //在g元素里面添加圆,利用pack布局计算好的圆心坐标和半径 enter.append("circle") .attr("r", function (d) { return d.r; }) .style("fill", '#FFCB72') .on("click", function (d) { svg.selectAll("circle").style("fill", '#FFCB72'); d3.select(this).style("fill", "#19314A"); lastfm.topArtists(d.name) .success(function (res) { if (res.error) { throw new Error(res.message); } else { $scope.currtag = d.name; var artists = res.topartists.artist.map(function (a) { a.genre = d.name; a.arank = +a['@attr'].rank; return a; }); $scope.artists = artists; } }); }); //在g元素里追加文本 enter.append("text") .attr("dy", ".3em") .style("text-anchor", "middle") .text(function (d) { return d.name; }); //当圆心坐标改变时,增加translation效果 selection.transition().duration(2000) .attr("transform", function (d) { return "translate(" + d.x + "," + d.y + ")"; }); //当圆的半径改变时,增加translation效果 selection.selectAll("circle").transition().duration(3000) .attr("r", function (d) { return d.r; }); resize(); }; function resize() { svg.attr("width", $el[0].clientWidth); svg.attr("height", $el[0].clientWidth); //It's a square } $scope.$on('windowResize',resize); //tagsize如果有变化,调用update方法 $scope.$watch('tagsize', update); $scope.$watch('toptags', update); }; return { template: '<div class="chart col-sm-12 col-md-12 col-lg-12 col-xl-12"></div>', replace: true, link: link, restrict: 'E' }; }]);
代码: https://github.com/hjzheng/front-end-collect
我涉及的数据可视化的实现技术和工具 数据可视化实战:使用D3设计交互式图表 Creating Custom D3 Directives in AngularJS
The text was updated successfully, but these errors were encountered:
2015年 第一篇,祝福CUF Team越来越强!
Sorry, something went wrong.
No branches or pull requests
D3(Data-Driven Documents)
什么是D3?
这里的D3,首先不是尼康相机也不是暗黑破坏神3更不是维生素。
摘自数据可视化实战:使用D3设计交互式图表
D3优点
D3缺点
d3.
一个例子, 基于AngularJS (http://projects.delimited.io/experiments/last-fm/)
另一个例子,是我自己写的(http://get-set.cn/front-end-chart/)
代码: https://github.com/hjzheng/front-end-collect
参考资料
我涉及的数据可视化的实现技术和工具
数据可视化实战:使用D3设计交互式图表
Creating Custom D3 Directives in AngularJS
The text was updated successfully, but these errors were encountered: