UNPKG

dc

Version:

A multi-dimensional charting library built to work natively with crossfilter and rendered using d3.js

76 lines (64 loc) 2.29 kB
<!DOCTYPE html> <html lang="en"> <head> <title>dc.js - Cap and Sort Differently</title> <meta charset="UTF-8"> <link rel="stylesheet" type="text/css" href="../css/bootstrap.min.css"> <link rel="stylesheet" type="text/css" href="../css/dc.css"/> </head> <body> <div class="container"> <script type="text/javascript" src="header.js"></script> <div id="test"></div> <script type="text/javascript" src="../js/promise-polyfill.js"></script> <script type="text/javascript" src="../js/fetch.umd.js"></script> <script type="text/javascript" src="../js/d3.js"></script> <script type="text/javascript" src="../js/crossfilter.js"></script> <script type="text/javascript" src="../js/dc.js"></script> <script type="text/javascript"> var chart = dc.pieChart("#test"); d3.csv("morley.csv").then(function(experiments) { var ndx = crossfilter(experiments), runDimension = ndx.dimension(function(d) { return "run-"+String.fromCharCode(90 - +d.Run);}) speedSumGroup = runDimension.group().reduceSum(function(d) {return d.Speed * d.Run;}); var chart = dc.pieChart("#test"); chart .width(768) .height(480) .slicesCap(5) .innerRadius(100) .dimension(runDimension) .group(speedSumGroup) .legend(dc.legend()) // workaround for #703: not enough data is accessible through .label() to display percentages .on('pretransition', function(chart) { chart.selectAll('text.pie-slice').text(function(d) { return d.data.key + ' ' + dc.utils.printSingleValue((d.endAngle - d.startAngle) / (2*Math.PI) * 100) + '%'; }) }); chart.data(function(group) { var items = group.all(), rest; items = chart._computeOrderedGroups(items); // sort by baseMixin.ordering if (chart.cap()) { if (chart.takeFront()) { rest = items.slice(chart.cap()); items = items.slice(0, chart.cap()); } else { var start = Math.max(0, items.length - chart.cap()); rest = items.slice(0, start); items = items.slice(start); } } items.sort((a,b) => d3.ascending(a.key, b.key)); if (chart.othersGrouper()) { return chart.othersGrouper()(items, rest); } return items; }) chart.render(); }); </script> </div> </body> </html>