2016-07-22 2 views
0

Я начинаю на d3.js и пытаюсь воссоздать это: https://bl.ocks.org/mbostock/4062045 с данными узла и ссылки в html-файле. У меня это до сих пор:Ошибка типа uncaught на d3.js

var svg = d3.select("svg"), 
     width = +svg.attr("width"), 
     height = +svg.attr("height"); 

    var color = d3.scaleOrdinal(d3.schemeCategory20); 

    var simulation = d3.forceSimulation() 
     .force("link", d3.forceLink().id(function(d) { return d.id; })) 
     .force("charge", d3.forceManyBody()) 
     .force("center", d3.forceCenter(width/2, height/2)); 

    var link = svg.append("svg:g") 
     .attr("class", "links") 
     .selectAll("line") 
     .data(links) 
     .enter().append("line") 
     .attr("stroke-width", function(d) { return Math.sqrt(d.value); }); 

    var node = svg.append("svg:g") 
     .attr("class", "nodes") 
     .selectAll("circle") 
     .data(nodes) 
     .enter().append("circle") 
     .attr("r", 5) 
     .attr("fill", function(d) { return color(d.group); }) 
     .call(d3.drag() 
      .on("start", dragstarted) 
      .on("drag", dragged) 
      .on("end", dragended)); 

    node.append("title") 
     .text(function(d) { return d.id; }); 

    simulation 
     .nodes(nodes) 
     .on("tick", ticked); 

    simulation.force("link") 
     .links(links); 

    function ticked() { 
     link 
      .attr("x1", function(d) { return d.source.x; }) 
      .attr("y1", function(d) { return d.source.y; }) 
      .attr("x2", function(d) { return d.target.x; }) 
      .attr("y2", function(d) { return d.target.y; }); 

     node 
      .attr("cx", function(d) { return d.x; }) 
      .attr("cy", function(d) { return d.y; }); 
    } 

    function dragstarted(d) { 
    if (!d3.event.active) simulation.alphaTarget(0.3).restart(); 
    d.fx = d.x; 
    d.fy = d.y; 
    } 

    function dragged(d) { 
    d.fx = d3.event.x; 
    d.fy = d3.event.y; 
    } 

    function dragended(d) { 
    if (!d3.event.active) simulation.alphaTarget(0); 
    d.fx = null; 
    d.fy = null; 
    } 

однако я получаю index.html ошибки: 35 Uncaught TypeError:... Svg.append (...) Attr (...) SelectAll (...) данные (...). enter не является функцией. Почему это?

Большое спасибо

+0

Вы ссылаетесь на D3 v4? –

+0

Да, у меня есть над моим скриптом –

ответ

1

Я воссоздал его для вас здесь: https://jsfiddle.net/wpc3y1jd/

В принципе, некоторые вещи, чтобы следить за будет 1) убедитесь, что у вас есть v4 из D3, 2) определить свою SVG, прежде вы используете его в свой код и убедитесь, что вы установите ширину и высоту, так как вы вытягивать их в начале вашего кода, что-то вроде:

<svg width="500" height="500"></svg>

и, наконец, убедитесь, что вы справочник cing nodes и links правильно на вашем коде.

+0

Большое спасибо !!!!!! –

Смежные вопросы