【问题标题】:d3 voronoi arc Map - control attributes of the .arcsd3 voronoi arc Map - .arcs 的控制属性
【发布时间】:2015-10-26 09:37:16
【问题描述】:

我正在使用 voronoi 弧形地图示例 http://bl.ocks.org/mbostock/7608400 我可以成功地可视化我的进出口贸易数据集。

但是,我无法更改在特定位置生成的各个路径的属性。 我使用 .airport-arcs 来制作这些路径,并且我希望各个线条具有可变的“笔画宽度”或“颜色”。 我尝试了几种选择,例如:

var color = d3.scale.category20();
...       
var td = svg.selectAll(".airport-arcs")
td.style("stroke", function(d) { return color(d.count); });
td.attr("stroke-width", function(d) { return Math.log(d.count); });

这似乎将所有笔划宽度更改了相同的数量,而在给定位置生成的所有链接的颜色不同(但在不同位置之间不同)。 有关如何更改各个路径的属性的任何建议?

【问题讨论】:

    标签: javascript html dictionary d3.js selectall


    【解决方案1】:

    您的代码中有两个错误:

    1. 您没有选择您正在寻找的元素。选择类.airport-arcs 将返回包含所有路径的组。要单独操作路径,您需要像这样选择:

      var td = svg.selectAll(".airport-arcs path")
      
    2. 您正在访问错误的属性。 .count 不是绑定到路径的数据的直接属性,而是机场对象的直接属性。 d.source.count 就是你要找的。​​p>

    您更正后的代码如下所示:

    var color = d3.scale.category20();
    
    var td = svg.selectAll(".airport-arcs path")
    td.style("stroke", function(d) { return color(d.source.count); });
    td.attr("stroke-width", function(d) { return Math.log(d.source.count); });
    

    【讨论】:

    • 嗨,谢谢你的建议,是的,我忘了说我是 d3 和 JS 的新手。我已经在上面喜欢的示例文件中尝试了您的建议,但它产生的结果与我之前的相同。仅更改了“每组颜色”,但未更改单个路径.....
    • @Patrizio 也许,我不明白。 count每个机场 的值。因此,color(d.source.count) 将始终为从任何给定机场开始的所有航班返回相同的颜色。听起来您使用错误的标准来确定颜色。
    • count 是每个机场每个目的地的值。具有不同目的地的同一机场可能具有不同的计数值。因此,我希望基于 [count] 我可以为不同的路径拥有不同的属性。
    • 我不同意:检查airports.filter() 函数。它将count 设置为所有进出航班的数量,以较大者为准,并且仅包括具有count > 0 的机场。该示例的最后一条语句再次暗示了我将机场圆的半径设置为count 的平方根的假设。这只有在count每个机场 的航班数量时才有意义。
    • 你是绝对正确的。我错过了 airports.filter() 中的那一行。我正在查看 flight.csv,它对每个目的地都有计数。我将尝试在脚本中保留该信息,然后我想我可以获得我想要的行为。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    相关资源
    最近更新 更多