2013-07-14 35 views
0

如何利用树/包/群集/群集力布局当输入到程序是节点和集群和簇到簇链接使用D3

graph G { 
    e 
    subgraph clusterA { 
    a -- b; 
    subgraph clusterC { 
     C -- D; 
    } 
    } 
    subgraph clusterB { 
    d -- f 
    } 
    d -- D 
    e -- clusterB 
    clusterC -- clusterB 
} 

自动位置元素与D3的栅格预期的最终结果(使用D3)可以在 - >http://graphviz-dev.appspot.com处看到,但与此示例中看到的节点节点,节点群集和群集群具有适当的连接http://www.graphviz.org/content/fdpclust

+0

我“米不知道如果我明白你做的事情。你试图让D3的graphviz一类静态布局? –

+0

总之,我想看到这个http://www.graphviz.org/content/fdpclust的一个D3例子 – Rayraegah

+0

D3的一个类似的例子是可用的,但不幸的是我不能得到我的手 http://stackoverflow.com/questions/14571538/what-ever-happend-to-the-d3j-s-force-directed-graph-cluster-example-see-on-this- – Rayraegah

回答

2

如果我理解的很好,从群集中绘制边缘到另一个边缘。执行此操作的方法是在图的开头添加compound=true声明,并在要链接在一起的两个群集节点之间绘制边缘,使用lheadltail将群集精简为边缘的头部和尾部。然后

您的代码应该是这样的:

graph G 
{ 
    compound=true; 
    e 
    subgraph clusterA 
    { 
     a -- b; 
     subgraph clusterC 
     { 
      C -- D; 
     } 
    } 
    subgraph clusterB 
    { 
     d -- f 
    } 
    d -- D 
    e -- d [lhead=clusterB] 
    C -- d [ltail=clusterC, lhead=clusterB] 
} 

你在这个岗位的一些详细信息,如果需要:GraphViz - How to connect subgraphs?

+0

哦,这实际上有助于我将点语解析为D3。 – Rayraegah

+0

我不知道关于D3的事情,所以我不能帮助,对不起。 –

+0

我想通了。 – Rayraegah

1

Soooooo迟到了,但这里的你怎么能与d3-graphviz做到这一点与你的原始点和@Bastien Pasdeloup的点。

<!DOCTYPE html> 
 
<meta charset="utf-8"> 
 
<body> 
 
<script src="//d3js.org/d3.v4.min.js"></script> 
 
<script src="http://viz-js.com/bower_components/viz.js/viz.js"></script> 
 
<script src="https://github.com/magjac/d3-graphviz/releases/download/v0.1.2/d3-graphviz.min.js"></script> 
 
<div id="graph1" style="text-align: center;"></div> 
 
<div id="graph2" style="text-align: center;"></div> 
 
<script> 
 

 
    var dot1 = ` 
 
graph G { 
 
    e 
 
    subgraph clusterA { 
 
    a -- b; 
 
    subgraph clusterC { 
 
     C -- D; 
 
    } 
 
    } 
 
    subgraph clusterB { 
 
    d -- f 
 
    } 
 
    d -- D 
 
    e -- clusterB 
 
    clusterC -- clusterB 
 
} 
 
`; 
 
var dot2 = ` 
 
graph G 
 
{ 
 
    compound=true; 
 
    e 
 
    subgraph clusterA 
 
    { 
 
     a -- b; 
 
     subgraph clusterC 
 
     { 
 
      C -- D; 
 
     } 
 
    } 
 
    subgraph clusterB 
 
    { 
 
     d -- f 
 
    } 
 
    d -- D 
 
    e -- d [lhead=clusterB] 
 
    C -- d [ltail=clusterC, lhead=clusterB] 
 
} 
 
`; 
 

 
    d3.select("#graph1").graphviz() 
 
    .engine("fdp") 
 
    .renderDot(dot1); 
 

 
    d3.select("#graph2").graphviz() 
 
    .engine("fdp") 
 
    .renderDot(dot2); 
 
    
 
</script>

+0

已经很晚了。但是,这个甜蜜的ES6语法。 – Rayraegah

+0

只是好奇,因为我是一个JS新手;哪一部分是“甜美的ES6语法”部分? – magjac

+0

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Template_literals – Rayraegah