1

第一次使用,所以请原谅任何意外违反协议。我正在尝试将形成 D3 生成的弦图外环的弧线转换为各种条形图,每个组的弧线具有不同的外半径。我在 D3 文档中没有发现任何暗示这是不可能的,但我还没有找到解决方案。棘手的部分似乎是获得一个函数来执行并​​从我存储的 csv 文件中检索相关数字,并相应地更改弧的外半径。这是我到目前为止所拥有的(修改自“Andrew RP's Andrew's Chord Example”):

d3.csv('teams.csv', function(cities) {
d3.json('matrix1.json', function(matrix) {

// Compute the chord layout.
layout.matrix(matrix);

// Add a group per neighborhood.
var group = svg.selectAll(".group")
.data(layout.groups)
.enter().append("g")
.attr("class", "group")
.on("mouseover", mouseover);


// Add the group arc.
var groupPath = group.append("path")
.attr("id", function(d, i) { return "group" + i; })
.attr("d", d3.svg.arc().innerRadius(innerRadius).outerRadius(innerRadius + function(d, i) {return cities[i].conservation;}))
.style("fill", function(d, i) { return cities[i].color; });

但是当我运行程序时,它不显示外弧,并在浏览器的开发人员窗格中提供错误消息,说它无法解析“d”,并表明它在执行 outerRadius(...) 中的函数时遇到了问题。任何帮助或建议将不胜感激。谢谢!

4

1 回答 1

3

这段代码不正确:

.outerRadius(innerRadius + function(d, i) {return cities[i].conservation;})

您正在尝试求和innerRadius+ reference to functionfunction(d, i) {return cities[i].conservation;}只是对该函数的指针引用,而不是函数调用。这个函数不是直接调用的,它只是作为参数传递给 outerRadius,稍后执行它。在您的示例中,称为innerRadius + function(d, i) {return cities[i].conservation;}. 它们是不兼容的类型(innerRadius 可能是整数和函数(...是函数类型),因此调用方法.toString()并将字符串传递"100function (d, i) {return cities[i].conservation;}"给 .outerRadius ,其中 100 是innerRadius变量的值。代码应该是:

.outerRadius(function(d, i) {return innerRadius + cities[i].conservation;})
于 2015-06-08T19:39:11.017 回答