与其他节点具有相同等级的graphviz群集

与其他节点具有相同等级的graphviz群集,graphviz,dot,Graphviz,Dot,我试图创建一个图,我显式地指定了许多节点的秩,并指定了集群。以下代码生成我想要的图形类型: digraph { rankdir=LR subgraph cluster0 { "MATH 208" "MATH 211" graph [rankdir=LR, style="rounded,filled", color=gray] } subgraph year1 { subgraph {

我试图创建一个图,我显式地指定了许多节点的秩,并指定了集群。以下代码生成我想要的图形类型:

digraph {
    rankdir=LR
    subgraph cluster0 {
        "MATH 208"
        "MATH 211"
        graph [rankdir=LR, style="rounded,filled", color=gray]
    }
    subgraph year1 {
        subgraph {
            "MATH 100"
            "MATH 110"
            graph [rankdir=LR, rank=same]
        }
        subgraph {
            "MATH 101"
            "MATH 211"
            "MATH 208"
            graph [rankdir=LR, rank=same]
        }
        graph [rankdir=LR]
    }
    subgraph year2 {
        subgraph {
            "MATH 205"
            "PHIL 203"
            graph [rankdir=LR, rank=same]
        }
        graph [rankdir=LR]
    }
    subgraph year3 {
        subgraph {
            "MATH 311"
            "MATH 312"
            "MATH 375"
            graph [rankdir=LR, rank=same]
        }
        graph [rankdir=LR]
    }
    subgraph year4 {
        subgraph {
            "MATH 447"
            "MATH 412"
            graph [rankdir=LR, rank=same]
        }
        graph [rankdir=LR]
    }
    "MATH 100" -> "MATH 101"
    "MATH 100" -> "MATH 208"
    "MATH 101" -> "MATH 205"
    "MATH 110" -> "MATH 311"
    "MATH 211" -> "MATH 311"
    "MATH 110" -> "MATH 312"
    "MATH 211" -> "MATH 312"
    "PHIL 203" -> "MATH 375"
    "MATH 110" -> "MATH 447"
    "MATH 211" -> "MATH 447"
    "MATH 311" -> "MATH 412"
    "MATH 312" -> "MATH 412"
}
这将生成一个正确的图形,其中“MATH 211”与“MATH 101”的级别相同,但graphviz会发出警告

Warning: MATH 208 was already in a rankset, ignored in cluster pruned
Warning: MATH 211 was already in a rankset, ignored in cluster pruned
如果我从year1子图中删除“MATH 211”和“MATH 208”,graphviz将不再抱怨,但结果图中的集群不再与“MATH 101”处于同一级别(为什么会…):

有没有办法重新排列/重新排序我的点文件,以生成第一个图形,但没有任何警告?或者指定某个集群应与另一个节点位于同一列

我应该注意到,这个图成功地用graphviz 2.26编译,但用graphviz 2.28编译失败了…

  • 我认为子图需要有一个以“cluster”开头的名称 为了得到任何样式。实际上,如果没有集群前缀,它们可能什么也做不了 这可能是你很多问题的根源
  • 您不需要重复rankdir=LR。在顶部指定一次就足够了
  • 如果子图中没有一个节点相互依赖,则 他们很有可能已经处于同一等级,而等级=不应处于同一等级 需要
以下是一个适合我的版本:

    digraph {
    rankdir=LR
    subgraph cluster0 {
        "MATH 208"
        "MATH 211"
        graph [style="rounded,filled", color=gray]
    }
    subgraph clusteryear1 {
        subgraph cluster100{
            "MATH 100"
            "MATH 110"
            graph [rank=same]
        }
        subgraph cluster101{
            "MATH 101"
            "MATH 211"
            "MATH 208"
            graph [rank=same]
        }
    }
    subgraph clusteryear2 {
        subgraph cluster205{
            "MATH 205"
            "PHIL 203"
            graph [rank=same]
        }
    }
    subgraph clusteryear3 {
        subgraph cluster311{
            "MATH 311"
            "MATH 312"
            "MATH 375"
            graph [rank=same]
        }
    }
    subgraph clusteryear4 {
        subgraph cluster447 {
            "MATH 447"
            "MATH 412"
            graph [rank=same]
        }
    }
    "MATH 100" -> "MATH 101"
    "MATH 100" -> "MATH 208"
    "MATH 101" -> "MATH 205"
    "MATH 110" -> "MATH 311"
    "MATH 211" -> "MATH 311"
    "MATH 110" -> "MATH 312"
    "MATH 211" -> "MATH 312"
    "PHIL 203" -> "MATH 375"
    "MATH 110" -> "MATH 447"
    "MATH 211" -> "MATH 447"
    "MATH 311" -> "MATH 412"
    "MATH 312" -> "MATH 412"
}

关于集群,您是正确的,不需要为每个子图指定rankdir,但实际上我不希望所有子图都设置样式,只希望有一个名为cluster0的子图。(我会发布一张我的意思的图片,但还没有点)。在您的解决方案中,彩色集群出现在“MATH 205”列中,而不是像我所希望的那样出现在“MATH 101”列中。