【问题标题】:apply d3.nest rollup to nested pie chart (to vary the size of the pies)将 d3.nest rollup 应用于嵌套饼图(以改变饼图的大小)
【发布时间】:2013-09-06 23:59:21
【问题描述】:

我想修改 Mike Bostock 的嵌套馅饼示例 http://bl.ocks.org/mbostock/1305337 根据每个机场的航班数量有不同的饼图大小;直观地了解每个机场的繁忙程度。我的猜测是总结 通过的航班数量 .rollup(function(leaves) { return {"total_flights": d3.sum(leaves, function(d) {return +(d.flights);})} }) (来自http://bl.ocks.org/phoebebright/raw/3176159/) 并以某种方式将其应用于 r (半径),但由于我仍在学习,我不知道在哪里注入它。

感谢您的提示/帮助。

【问题讨论】:

    标签: javascript charts d3.js nested rollup


    【解决方案1】:

    使用每个起点的总航班创建一个对象:

    var totalFlights = {};
    airports.forEach(function(d){
      totalFlights[d.key] = d3.sum(d.values.map(function(d){ return +d.count; }));
    });
    

    根据起点的总航班量调整弧线的大小:

     var arc = d3.svg.arc()
        .innerRadius(function(d){ return totalFlights[d.data.origin]/952 * r / 2; })
        .outerRadius(function(d){ return totalFlights[d.data.origin]/952 * r; });
    

    952 在这里有点神奇,设置为等于从机场起飞的最大航班数。理想情况下,您应该使用比例尺。

    工作示例: http://bl.ocks.org/1wheel/6471631

    【讨论】:

    • 谢谢,亚当,它成功了。对于最大值(幻数),我想这应该可行: var totalFlights = {}; var maxflights = 0; airports.forEach(function(d){ totalFlights[d.key] = d3.sum(d.values.map(function(d){ return +d.count; })); }); if ( totalFlights[d.key] > maxflights ) { maxFlights = totalFlights[d.key] };
    • 顺便说一句,虽然它有效,但不确定为什么您的解决方案中没有使用汇总(具有求和功能)。你能解释一下吗?
    • 汇总会将信息添加到原始级别,但每个切片都在使用运营商级别进行绘制。如果修改此行,也可以使用汇总:'.data(function(d) { return pie(d.values).innerRadius(d.totalFlight/2).outerRadius(d.totalFlights); })
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    相关资源
    最近更新 更多