数据可视化 d3js学习之简单的饼图
2015-07-10 10:56
676 查看
使用d3js(v3)实现带坐标轴且基于数据驱动的简单饼图。
JS代码:
HTML:
效果图:
JS代码:
<script> var width = 375; var height = 375; var padding = 25; var padAngle = 0.01; var moveValue = 5; var pie = d3.layout.pie(); var color = d3.scale.category10(); var outerRadius = (width - 2 * padding) / 2; var innerRadius = (width - 2 * padding) / 4; window.onload = function () { var dataset = [30, 10, 43, 55, 13]; paintPie(dataset); }; function paintPie(data) { d3.select("body").select("svg").data([data]).enter().append("svg") .attr("width", width) .attr("height", height); var dataset = data; var arc = d3.svg.arc() .innerRadius(innerRadius) .outerRadius(outerRadius); var arcs = d3.select("svg").selectAll("g").data(pie(dataset)); arcs.exit().remove(); var arcsEnter = arcs.enter() .append("g") .attr("transform", "translate(" + (outerRadius + padding) + "," + (outerRadius + padding) + ")"); arcsEnter.append("path"); arcs.select("path") .attr("fill", function (d, i) { return color(i); }).attr("d", function (d) { d.padAngle = 0.01; return arc(d); }).on("mouseover", function (d) { var path = d3.select(this); var centroid = arc.centroid(d); var tranlate = calTranslate(centroid, moveValue); path.attr("transform", "translate(" + tranlate.x + "," + tranlate.y + ")"); }).on("mouseout", function () { var path = d3.select(this); path.attr("transform", "translate(0,0)"); }); arcsEnter.append("text"); arcs.select("text").attr("text-anchor", "middle") .text(function (d) { return d.value; }).transition().duration(500) .attr("transform", function (d) { return "translate(" + arc.centroid(d) + ")"; }); } //计算偏移(x,y) function calTranslate(centroid, d) { var tranlate = {}; var x = Math.sqrt(Math.pow(d, 2) / (1 + Math.pow(centroid[1], 2) / Math.pow(centroid[0], 2))); tranlate.x = x; if (centroid[0] < 0) { tranlate.x = -x; } tranlate.y = tranlate.x * centroid[1] / centroid[0]; return tranlate; } function redraw() { var dataset = [20, 10, 43, 55]; paintPie(dataset); } </script>
HTML:
<body> <button onclick="redraw();">重绘</button> </body>
效果图:
相关文章推荐
- 学习prefuse
- ASP生成柱型体,折线图,饼图源代码提供了第1/3页
- 使用js画图之饼图
- jqplot画饼状图(模式一)
- jqplot画饼状图(模式二)
- VBA 画好看的饼图
- ios、android 数据可视化图表赏析
- 奇虎360-数据可视化
- 软件即服务和云计算之间有什么区别
- (转)智能+可视化 看商业智能的发展方向
- 《Nevron NET Vision Enterprise 2007 v7.2.Q1》For VS2003 & For VS2005 FTP下载 技术共享
- 学习R网址
- 利用VTK对数据进行可视化的实例
- MATLAB-数据可视化笔记
- 计算机图形实现建模技术的3种方法
- 【斯坦福大学】计算机图形学实验室的概况
- MATLAB与外部程序的数据交互三板斧
- 如何正确理解商业智能(BI)?--上
- 基于内容的信息存取与MPEG-7
- web设计趋势与潮流