2015-11-05 10 views
0

Я пытаюсь настроить направленную ориентацию в d3, а мои узлы начинаются с начального радиуса в 0. Затем я хочу, чтобы пользователь мог нажать кнопку и радиус шкалы узлов до размера в соответствии с значением данных json. Когда я пытаюсь сделать это, однако, я получаю яваскрипта ошибку «Не удается прочитать свойство„Field4“неопределенныхd3 переходные круги к значению json-данных

Вот данные JSON:. https://api.myjson.com/bins/2n7do

А вот код:

// Update nodes. 
 
    
 
    circles = circles.data(data); 
 

 
    circles.exit().remove(); 
 

 
    var nodeEnter = circles.enter().append("g") 
 
     .attr("class", "node") 
 
     .style("fill", function(d) { return color(d.FIELD5); }) 
 
     .style("opacity", 0.75) 
 
     .call(force.drag); 
 

 
    nodeEnter.append("circle") 
 
     .attr("r", 9) 
 
     d3.select(circles).transition() 
 
     .delay(3000) 
 
     .duration(1000) 
 
     .attr("r", function(d) { return d.FIELD4 * 0.000195 });;

+0

Вам не нужен 'd3.select (круги)', просто 'nodeEnter.append (« круг »). Attr (« r », 9) .transition(). Delay (3000). duration (1000) .attr ("r", function (d) {return d.FIELD4 * 0.000195}); '. –

+0

Я попробовал это, и появилась визуализация, но вместо того, чтобы перейти к новому размеру, все узлы полностью исчезли. И теперь я получаю эту ошибку javascript: «Ошибка: недопустимое значение для атрибута r =« NaN »« –

+0

Вам также нужно преобразовать строку в число, поэтому '.attr (« r », function (d) { return + d.FIELD4 * 0.000195}); '. –

ответ

0

круги является выбор d3. Поступая d3.select(circles) вы выбираете выбор. Я не думаю, что это действует. Вместо d3.select(circles).transition() try circles.transition()

+0

Я пробовал это и ничего не менял. Узлы все еще появляются с радиусом размера 9 вместо перехода к значению данных. Вот код: nodeEnter.append ("круг") .attr ("г", 9) circles.transition() .delay (3000) .duration (1000) .attr (» r ", function (d) {return data.FIELD4 * 0.000195}) ;; –

+0

try: var actual_circle = nodeEnter.append ("circle"); Тогда actual_circle.transition(). Attr ("r", function (d) {return (+ d.FIELD4) * 0.000195}); – sergeyz