2013-07-22 13 views
6

Mój kod jest oparty na D3.js Indented tree example.d3.js Drzewo z nacięciem z prostymi linkami

Potrzebuję linków prostych zamiast zakrzywionych łączy między obiektami nadrzędnymi/potomnymi.

Rozumiem, że ma to coś wspólnego z następującym kodem, jednak nie mogę znaleźć rozwiązania. Chcę, żeby linki były proste z obrotem o 90 stopni.

var diagonal = d3.svg.diagonal() 
    .projection(function(d) { return [d.y, d.x]; }); 
+0

Tego typu linki są uważane za 'prostopadłe' – Ian

Odpowiedz

4

Problem polega na wyodrębnieniu punktów x i y z linków. Jednym ze sposobów na to jest: generator

Link:

self.diagonal = d3.svg.line().interpolate('step') 
     .x(function (d) { return d.x; }) 
     .y(function (d) { return d.y; }); 

a następnie użyć generatora takiego:

link.enter().append('svg:path', 'g') 
     .duration(self.duration) 
     .attr('d', function (d) { 
      return self.diagonal([{ 
       y: d.source.x, 
       x: d.source.y 
      }, { 
       y: d.target.x, 
       x: d.target.y 
      }]); 
     }); 
1

Już prawie jesteś. Musisz użyć normalnej linii z odpowiednią interpolacją, np.

var line = d3.svg.line().interpolation("step") 
       .x(function(d) { return d.y; }) 
       .y(function(d) { return d.x; }); 

Być może trzeba będzie zmienić dokładny tryb interpolacji.

+0

Jako [Simenhg pokazane] (http://stackoverflow.com/a/17851829/109618) 'd3.svg.line()' sam nie może być użyty jako prosty zamiennik dla 'd3.svg.diagonal() ', ponieważ zwracają różne rzeczy. –

+0

Zobacz także [Substituting d3.svg.diagonal() with d3.svg.line()] (http://stackoverflow.com/a/20116569/109618). –