Search code examples
javascriptd3.jssvgdiagonal

D3.js svg.diagonal issue


I have this little issue : I'm not able to draw a curved line with json data.

Here's go my code

    var diagonal = d3.svg.diagonal();
groupe.selectAll("path")
    .data([data])
    .enter()
    .append("path")
    .attr("d",diagonal
        .source({x:250, y:500})
        .target({x:400, y:300}))
    .attr("fill", "none")
    .attr("stroke", "#000")
    .attr("stroke-width","2");

Here I put some data, but when i try with

.source({'x':function(d) {return d.x},'y':function(d) {return d.x})

I habve an error in the console and I'm not able to draw the lines

Do you know where is my error ?

My data looks like this

var data = [
    {"x":250,"y":500,"width": 100, "height": 100, "nx":400, "ny":300, "class":"brief", "name": "Prise de Brief"},
    {"x":400,"y":300,"width": 150, "height": 150, "nx":600, "ny":450, "class":"conception", "name": "Conception"},
    {"x":600,"y":450,"width": 150, "height": 150, "nx":900, "ny":500, "xI":600,"yI":450,"wI": 50, "hI": 50, "xlink": "img/hexagone_plein.svg", "class":"crea", "name": "Création graphique", "id": "crea"},
    {"x":900,"y":500,"width": 150, "height": 150, "nx":1150, "ny":350, "class":"dev", "name": "Développements techniques"},
    {"x":1150,"y":350,"width": 100, "height": 100, "nx":1300, "ny":500, "class":"recette", "name": "Recette"},
    {"x":1300,"y":500,"width": 100, "height": 100, "nx":1500, "ny":650, "class":"mel", "name": "Mise en ligne"},
    {"x":1500,"y":650,"width": 100, "height": 100, "nx":1500, "ny":650, "class":"garantie", "name": "Garantie"}
];

Solution

  • I think you have the syntax wrong for source functions, as well as the data already being an array, maybe this will work?

    var diagonal = d3.svg.diagonal();
    
    groupe.selectAll("path")
      .data(data)
      .enter()
      .append("path")
      .attr("d",diagonal
          .source(function(d){ return {"x":d.x, "y":d.y};})
          .target({x:400, y:300}))
      .attr("fill", "none")
      .attr("stroke", "#000")
      .attr("stroke-width","2");