Już jakiś czas temu spotkałem się z podobnymi problemami. Rozwiązaniem, na które w końcu przyjechałem, jest mała biblioteka js, która doskonale poradziła sobie z tą sztuczką, a mianowicie Dracula.
Tu jest link do biblioteki: https://github.com/strathausen/dracula
Biorąc pod uwagę Twoje potrzeby, wszystko musisz zrobić, to coś takiego:
var g = new Graph();
g.addEdge('author', 'create');
g.addEdge('author', 'reader');
g.addEdge('author', 'admin');
// add here the other edges.
var layouter = new Graph.Layout.Spring();
layouter.layout();
var renderer = new Graph.Renderer.Raphael('#canvas', g, 400, 300);
renderer.draw();
Dalsze informacje o, dam ci walczyć z dokumentacja.
Mam nadzieję, że to pomaga.
[DODATEK]
Dodam, że, ogólnie rzecz biorąc, chodzi o wyświetlanie węzłów i strzałek nie ma wielkiego, używając SVG czyni go blisko trywialne. Ale rzeczy się komplikują, gdy chcesz zorganizować wyświetlanie węzłów za pomocą reguł takich jak "spróbuj zminimalizować liczbę przekraczających krawędzi", "wyświetl dzieci poniżej ich rodziców", itd., Które wszystkie wymagają skomplikowanej matematyki.
Nie sądzę, że Dracula pozwala na dostosowanie tego rodzaju reguł. Niemniej jednak, biorąc pod uwagę twój komentarz, myślę, że może istnieć niezbyt skomplikowany sposób, aby układ wyglądał jak pionowe drzewo, ponieważ jest to acykliczny wykres (przynajmniej wydaje się być). Ale wtedy będziesz musiał przejść przez tworzenie własnej biblioteki.
Czy możesz spróbować z pakietem gruszki? –
Możesz użyć http://sigmajs.org/ biblioteki też –