【问题标题】:Graphviz: specify style of nodes using inline notationGraphviz:使用内联表示法指定节点的样式
【发布时间】:2017-08-28 19:23:33
【问题描述】:

我的图表看起来像:

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

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

【问题讨论】:

    标签: graphviz dot


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      如上所述,点语言语法不支持这一点。可以通过使用子图来解决问题:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-16
        • 2018-11-22
        • 1970-01-01
        • 2019-10-25
        • 1970-01-01
        相关资源
        最近更新 更多