2015-06-08 4 views
1

Первый пользователь, поэтому, пожалуйста, извините за случайное нарушение протокола. Я пытаюсь взять дуги, которые образуют внешнее кольцо созданной D3 диаграммы аккорда и превращать их в гистограмму сортов, дуги каждой группы имеют другой внешний радиус. Я не нашел ничего в документации D3, предполагающей, что это невозможно, но я еще не нашел решения. Кажется, что эта сложная часть выполняет функцию для выполнения и получения соответствующего номера из файла csv, который у меня есть, и изменения внешнего радиуса дуги. Вот то, что я до сих пор (Измененный «Эндрю Rp в Андреевском аккорда Пример»):Изменение внешнего радиуса дуги на основе данных на d3.js

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» и показать, что у него проблемы с выполнением функции внутри externalRadius (...). Любая помощь или совет будут очень признательны. Спасибо!

ответ

2

Этот фрагмент кода неверен:

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

Вы пытаетесь подвести innerRadius + reference to function. function(d, i) {return cities[i].conservation;} - ссылка только на указатель на эту функцию, а не на вызов функции. Эта функция не вызывается напрямую, она передается только как аргумент externalRadius, который выполняет ее позже. В вашем примере называется 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;}) 
+0

это установил ее. Спасибо вам, так много. Я потратил 7 часов возиться с ним, но я не очень понимаю, D3 и как работает вся сцепление вещь. вы сделали небольшую часть в продвижение медицинских исследований, поэтому спасибо за это. – oolam18