代码之家  ›  专栏  ›  技术社区  ›  Vilx-

Graphviz:如何为一组边指定相同的样式?

  •  22
  • Vilx-  · 技术社区  · 15 年前

    不幸的是,我没有看到任何类似于“class”或“stylesheet”属性的边。我只能为每个边单独设置视觉属性(大量重复)。也许我错过了什么?到底有没有什么方法可以将边添加到4个不同的组中,然后设置组的样式,而不是单独设置每个边的样式?

    2 回复  |  直到 7 年前
        1
  •  33
  •   doug    12 年前

    设置边(或节点)样式的步骤 与其单独使用,不如使用 .

    digraph G {
    
    node [style=filled,color="#5D8AA8", fillcolor="#5D8AA8"];
    
    subgraph c1 {
        edge [color="#004225", arrowsize="0.6", penwidth="1"];
        "node 1" -> "node 3";
        "node 5" -> "node 7";
        "node 1" -> "node 2"; 
        label = "";
    }
    
    subgraph c2 {
        edge [color="#FBEC5D", arrowsize="1.2", penwidth="3"];
        "node 2" -> "node 4";
        "node 4" -> "node 6";
        "node 3" -> "node 5";
        "node 6" -> "node 8"; 
        label = "";
    
    }
    
    begin -> "node 1";
    start -> "node 2";
    "node 1" -> "node 4"
    "node 2" -> "node 6";
    
    start [shape=diamond];}
    

    不同类型的边缘,外观。

    一种类型是默认值(颜色=黑色,厚度=1,等等)--也就是说,这些边没有指定给子图。

    其他两种类型的边(一个薄的深绿色组和一个厚的亮黄色组)是基于对两个子图簇之一的赋值而设计的。

    子图 通常用于视觉上 突出 一个节点簇(即,将一个特定的连续节点“组”与图中的其余节点区分开来);但是,没有要求(从我的示例中可以看出)您选择通过指定给给定子图来设置样式的边属于连续的节点“组”——您可以指定要指定给给定子图的任何边。)

        2
  •  14
  •   bukzor    12 年前

    虽然@doug的答案是正确的(使用子图为对象组指定类似的样式),但我相信我的示例更好:

    digraph G {                                                                     
      compound=true;
      subgraph columns {
        c0r0 -> c0r1;
        c0r1 -> c0r2;
        c1r0 -> c1r1;
        c1r1 -> c1r2;
        c2r0 -> c2r1;
        c2r1 -> c2r2;
      }
      subgraph rows {
        edge [color=red, constraint=false];
        c0r0 -> c1r0;
        c1r0 -> c2r0;
        c0r1 -> c1r1;
        c1r1 -> c2r1;
        c0r2 -> c1r2;
        c1r2 -> c2r2;
      }
    }
    


    cat square-digraph.dot | dot -Tsvg -o square-digraph.svg 
    

    the resulting graph

        3
  •  1
  •   HugO    7 年前

    正如@bousch所指出的,不需要子图。

    digraph G {                                                                     
      compound=true;
      
        c0r0 -> c0r1;
        c0r1 -> c0r2;
        c1r0 -> c1r1;
        c1r1 -> c1r2;
        c2r0 -> c2r1;
        c2r1 -> c2r2;
      
        edge [color=red, constraint=false];
        c0r0 -> c1r0;
        c1r0 -> c2r0;
        c0r1 -> c1r1;
        c1r1 -> c2r1;
        c0r2 -> c1r2;
        c1r2 -> c2r2;
      
    }

    和@bukzor一样。