2011-11-19 58 views
8

需要绘制一个复杂的图形,其中将有3种类型的边和几种预定义的节点类型。graphviz定义更多“默认”

是否可以稍后定义更多(例如,不仅一个默认值)“边缘类型”(或节点类型)供以后使用?

的意思是这样:

edge [colorscheme=paired12, color=8, fontsize=11, fontname="Arial narrow"]; 
edge2 [colorscheme=paired12, color=3, fontsize=11, fontname="Arial narrow", style=bold]; 
edge3 [colorscheme=paired12, color=5, fontsize=14, fontname="Arial narrow"]; 

node1 -> node2; /* will use the default edge definition from the above */ 
node2 -> node3 [edgetype=edge2]; /* will use the second edge definition */ 
node2 -> node4 [edgetype=edge3]; /* and so on... */ 

以上,OFC,是不正确的 - 只为说明...

回答

7

使用gvpr很简单,如果你找出最基础的:

input.dot

digraph test { 
    node1 -> node2[label="test 1"]; /* will use the default edge definition from the above */ 
    node2 -> node3 [label="test 2", edgetype="edge2"]; /* will use the second edge definition */ 
    node2 -> node4 [label="test 3", edgetype="edge3"]; /* and so on... */ 
} 

filter.gvpr

E { 
    color="red"; 
    fontsize=11; 
    fontname="Arial narrow" 
} 
E[edgetype == "edge2"] { 
    color="green"; 
    fontsize=11; 
    fontname="Arial narrow"; 
    style="bold" 
} 
E[edgetype == "edge3"] { 
    color="blue"; 
    fontsize=14; 
    fontname="Arial narrow" 
} 

随着命令

gvpr -c -f filter.gvpr -o output.dot input.dot

会产生output.dot文件:

digraph test { 
    node1 -> node2 [color=red, 
     fontname="Arial narrow", 
     fontsize=11, 
     label="test 1"]; 
    node2 -> node3 [color=green, 
     edgetype=edge2, 
     fontname="Arial narrow", 
     fontsize=11, 
     label="test 2", 
     style=bold]; 
    node2 -> node4 [color=blue, 
     edgetype=edge3, 
     fontname="Arial narrow", 
     fontsize=14, 
     label="test 3"]; 
} 
+1

哇!那很棒!感谢名单。 ;) – jm666

+1

不客气,查看https://github.com/ellson/graphviz/tree/master/cmd/gvpr/lib,了解更多(复杂)示例,您可以使用'gvpr'做什么。 – nepda

4

不,那是不可能的。

我经常按其类型对边缘定义进行分组,并在每个组之前重新定义默认值。例如:

// type 1 edges 
edge [colorscheme=paired12, color=8, fontsize=11, fontname="Arial narrow"]; 
n1 -> n2; 
n3 -> n4; 
... 

// type 2 edges 
edge [colorscheme=paired12, color=3, fontsize=11, fontname="Arial narrow", style=bold]; 
n10 -> n11; 
... 

// type 3 edges 
edge [colorscheme=paired12, color=5, fontsize=14, fontname="Arial narrow"]; 
... 

的其他 - 更复杂 - 可能是使用像gvpr的工具,它可以让你操纵的图形,并添加在那一刻边缘属性。

+0

感谢名单,整洁的想法重新定义和分组的边缘... – jm666