使用点时如何订购子图簇?

时间:2017-02-26 01:16:10

标签: graphviz dot

我有一个点文件,我在其中创建子图簇,我希望按特定顺序显示,让我们说我有这个:

digraph G {
    splines=true;
    sep="+25,25";
    overlap=scalexy;
    nodesep=0.6;
    subgraph cluster_2 {
        label="ADD_MORE_PROBLEMS";
        subgraph cluster_3 {
            label="pattern";
            N1 [label="problem"];
        }
        subgraph cluster_4 {
            label="replacement";
            N2 [label="problem"];
            N3 [label="problem"];
        }
    }
}

创造了:

output from dot

我如何确保"模式"出现在"更换"的左侧(我可能有任意数量的子图。)

2 个答案:

答案 0 :(得分:3)

我无法回答,但可以提供一些澄清。强制布局的常用方法是引入隐藏边。在这种情况下,它不起作用。

如果没有嵌套群集,您可以使用rank=same将连接的边缘强制放在同一级别上。然后,不可见的边N1 -> N2 [style = invis]会强制节点进入正确的排序。

但是,使用排名约束节点会破坏集群成员资格并阻止该计划运行。

修改后的图表显示了结果。可能没有一般的解决方案。

digraph G {
    splines=true;
    sep="+25,25";
    overlap=scalexy;
    nodesep=0.6;
    subgraph cluster_2 {
        label="ADD_MORE_PROBLEMS";
        subgraph cluster_3 {
            label="pattern";
            N1 [label="problem 1"];
        }
        subgraph cluster_4 {
            label="replacement";
            N2 [label="problem 2"];
            N3 [label="problem 3"];
        }
        // Introduce hidden edge (shown dashed)
        N1 -> N2 [style = dashed];
        // Force nodes to remain at same rank
        { rank = same; N1; N2; }
    }
}

Constrained luster ordering

答案 1 :(得分:3)

集群是奇怪的情况之一,其中简单的代码中的排序使得差异最大(如果不是全部)。如果我们只是按照以下方式重新排序您的代码:

p::before

完全不同。The "ADD_MORE_PROBLEMS" cluster contains both the "pattern" cluster and the "replacement" cluster. The "pattern" cluster is to the left of the "replacement" cluster. The "pattern" cluster contains a single node, labeled 'problem'. The "replacement" cluster contains two nodes, both labeled 'problem'.

现在,这可能会失败,在这种情况下,设置隐形边是更常见的解决方案之一。