Graphviz 我可以同时将样式应用于多个子图中的多个点节点吗?

Graphviz 我可以同时将样式应用于多个子图中的多个点节点吗?,graphviz,dot,Graphviz,Dot,考虑这个DOT示例: digraph Foo { subgraph clusterA { A -> B; } subgraph clusterB { X -> Y; } subgraph connection_type_1 { edge [color=red]; A -> Y; } subgraph connection_type

考虑这个DOT示例:

digraph Foo
{
    subgraph clusterA
    {
        A -> B;
    }

    subgraph clusterB
    {
        X -> Y;
    }

    subgraph connection_type_1
    {
        edge [color=red];
        A -> Y;
    }

    subgraph connection_type_1
    {
        edge [color=green];
        B -> X;
    }

    subgraph node_type_1
    {
        node [style=filled, color=".5,.5,.5"]; // THIS LINE DOESN'T WORK
        X [label="foo"];
        A;
    }
}
该结构在两个簇中列出,边缘随后添加到语义/美容等效组中。边缘的颜色与预期一致

但这不适用于设置节点样式。除非我将标记线移动到其中一个cluster*子图中,否则标记线无效,但它将应用于该子图中的所有节点

奇怪的是label=foo在最后一个子图中起作用,而style不起作用


我有一种感觉,答案是你只能在第一次提到节点属性时设置它们,但是有没有办法说以下节点,无论它们在哪里,都应该具有以下属性?

该行不起作用,因为它只设置默认属性,并且节点已经创建。默认属性无效。标签是覆盖任何默认值的具体属性,因此生效

因此,您应该将代码重新排序为

使用默认属性创建所有节点 使用默认属性再次创建所有边 将节点分配给集群 步骤2和3将创建defauls属性处于活动状态的节点。您的示例仅在偶然情况下对边起作用,因为您仅对不存在的边进行了尝试。对于簇中已定义的2条边,该操作不起作用

digraph Foo {
    subgraph node_type_1 {
        node [style=filled, color=".5,.5,.5"];
        A;
        X [label="foo"];
    }
    subgraph node_type_2 {
        node [style=none];
        B;
        Y;
    }
    subgraph connection_type_1 {
        edge [color=red];
        A -> Y;
        A -> B;
    }
    subgraph connection_type_2 {
        edge [color=green];
        B -> X;
        X -> Y;
    }
    subgraph clusterA {
       A;
       B;   
    }
    subgraph clusterB {
        X;
        Y;
    }
}

而且,每个节点都应该只是一个子图的一部分。我敢肯定你会从这个图表中得到一些警告。