Graphviz:使用内联符号指定节点样式

Graphviz: specify style of nodes using inline notation

我的图表如下所示:

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"]
  }
}

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

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

如果你看一下 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.

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

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