Graphviz:使用内联表示法指定节点的样式

时间:2017-08-28 10:06:20

标签: graphviz dot

我的图表看起来像是:

digraph R {
  rankdir=LR
  "foo" -> "bar";
}

现在我希望 foo 的节点样式是正方形,而 bar 是一个圆圈。此外,在随后的使用中,应该是这种情况,例如:

digraph R {
  rankdir=LR
  "foo" -> "bar" [label="qux1"];
  "baz" -> "foo" [label="qux2"];
}

然后 foo 应该是一个正方形。有没有办法使用这个内联文档来指定它?

请注意!我知道我可以写:

digraph G {
  { 
    node1 [shape=box, label="foo"]
    node2 [shape=circle, label="bar"]
    node1 -> node2 [label="qux"]
  }
}

但这不是我想要的。我想使用这种特定的内联符号。

2 个答案:

答案 0 :(得分:2)

你要求的是不可能的 - 不幸的是,没有其他答案。

如果您查看grammar of the dot language

graph       :   [ strict ] (graph | digraph) [ ID ] '{' stmt_list '}'
stmt_list   :   [ stmt [ ';' ] stmt_list ]
stmt        :   node_stmt
            |   edge_stmt
            |   attr_stmt
            |   ID '=' ID
            |   subgraph
attr_stmt   :   (graph | node | edge) attr_list
attr_list   :   '[' [ a_list ] ']' [ attr_list ]
a_list      :   ID '=' ID [ (';' | ',') ] [ a_list ]
edge_stmt   :   (node_id | subgraph) edgeRHS [ attr_list ]
edgeRHS     :   edgeop (node_id | subgraph) [ edgeRHS ]
node_stmt   :   node_id [ attr_list ]
node_id     :   ID [ port ]
port        :   ':' ID [ ':' compass_pt ]
            |   ':' compass_pt
subgraph    :   [ subgraph [ ID ] ] '{' stmt_list '}'
compass_pt  :   (n | ne | e | se | s | sw | w | nw | c | _)

edge_stmt 的组成不包含节点属性。允许节点属性的唯一语句是 node_stmt

答案 1 :(得分:0)

如上所述,点语言语法不支持此功能。可以使用子图来完成解决方法:

digraph G {
   subgraph { nodefoo [label="foo", shape=box]; } ->  
   subgraph { nodebar [label="bar", shape=circle]; } 
   [label="qux"];
}