2010-06-27 76 views
21

我已经得到了我想要的Graphviz布局和可视化我的图表。该图有122个边和123个节点。边缘有4种不同的类型,我希望它们在视觉上可以区分。但是我还没有决定什么是这样做的最好的方式,我想与表盘周围玩了一下。不幸的是,我没有看到任何类似边的“class”或“stylesheet”属性。我只能为每个边缘单独设置视觉属性(大量重复)。也许我错过了什么?是否可能有某种方式将边缘添加到4个不同的组中,然后对组进行设计,而不是单独设计每个边缘?的Graphviz:如何在同一样式分配到一组边缘?

回答

30

为了通过组样式边缘(或节点)而不是单独使用子图

像这样:

digraph G { 

node [style=filled,color="#5D8AA8", fillcolor="#5D8AA8"]; 

subgraph c1 { 
    edge [color="#004225", arrowsize="0.6", penwidth="1"]; 
    "node 1" -> "node 3"; 
    "node 5" -> "node 7"; 
    "node 1" -> "node 2"; 
    label = ""; 
} 

subgraph c2 { 
    edge [color="#FBEC5D", arrowsize="1.2", penwidth="3"]; 
    "node 2" -> "node 4"; 
    "node 4" -> "node 6"; 
    "node 3" -> "node 5"; 
    "node 6" -> "node 8"; 
    label = ""; 

} 

begin -> "node 1"; 
start -> "node 2"; 
"node 1" -> "node 4" 
"node 2" -> "node 6"; 

start [shape=diamond];} 

所以,如果你把上面的代码在一个文件瓦特/“.DOT”扩展名;然后呈现在graphviz的,,你会看到不同类型的边,外观睿智。

一种类型是只是默认(颜色=黑色,厚度= 1等)。 - 即,这些边缘未分配给子图。

另外两种类型的边(一个薄的,深绿色基和厚,明亮的黄色组)基于分配两个子集群之一样式。

子图经常被用来在视觉上加亮一个节点集群(即,从在图中的节点的其余部分区分节点的特定连续“组”);然而,没有任何要求(正如你可以从我的例子中看到的那样),你选择通过赋值给一个给定的子图来选择样式的边缘,属于一个连续的“节点组”,你可以指定你希望赋值给的任何边一个给定的子图。)

给我,按组造型节点类似于定义一个类并将其分配到的div的HTML标记集合的HTML实践

+0

我们如何设置子图的默认风格? – Pacerier 2014-07-16 19:48:50

+1

不需要子图。在边缘样式声明下使用“edge [color = ... etc]”定义的所有边将使用该样式。 – Bousch 2015-08-19 10:18:58

12

虽然@豆豆的答案是正确的(使用子图指定风格相近的对象组),我相信我的例子是更好:

digraph G {                  
    compound=true; 
    subgraph columns { 
    c0r0 -> c0r1; 
    c0r1 -> c0r2; 
    c1r0 -> c1r1; 
    c1r1 -> c1r2; 
    c2r0 -> c2r1; 
    c2r1 -> c2r2; 
    } 
    subgraph rows { 
    edge [color=red, constraint=false]; 
    c0r0 -> c1r0; 
    c1r0 -> c2r0; 
    c0r1 -> c1r1; 
    c1r1 -> c2r1; 
    c0r2 -> c1r2; 
    c1r2 -> c2r2; 
    } 
} 


cat square-digraph.dot | dot -Tsvg -o square-digraph.svg 

the resulting graph

+1

完美,简单完美。 – Pacerier 2014-07-16 20:00:48

+1

为什么它更好?不是要批评你。我不知道graphviz足够了解它是如何更好,我有兴趣找出答案。 – 2015-04-06 14:45:07

+0

我只是喜欢结果图。解决方案的原理没有什么不同。 – bukzor 2015-04-12 13:51:23