graphviz定义了更多"默认值"

时间:2011-11-19 16:56:36

标签: graphviz

需要绘制一个复杂的图形,其中有3种类型的边和几种预定义的节点类型。

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

意思是:

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,不正确 - 只是为了解释......

2 个答案:

答案 0 :(得分: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 :(得分: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这样的工具,它可以让你操作图形,并在那一刻添加边缘属性。