【问题标题】:Graphviz cluster changes layout order of internal nodes - how to correct?Graphviz 集群更改内部节点的布局顺序 - 如何更正?
【发布时间】:2018-02-11 17:18:54
【问题描述】:

以下graphviz节点在使用点渲染时按预期排列成C形:

digraph G {
newrank=true;
"001_getCtInputChunk" [shape=rect, label="@disk_cache\ngetCtInputChunk"];
"004_augmentCtInputChunk" [shape=rect, label=augmentCtInputChunk];
"002_cache_dir" [shape=cylinder, label="Cache Dir\n(.pkl.gz)"];
"003_LunaDataset" [shape=box3d, label=LunaDataset];
"001_getCtInputChunk" -> "002_cache_dir";
"002_cache_dir" -> "001_getCtInputChunk";
"001_getCtInputChunk" -> "003_LunaDataset";
"003_LunaDataset" -> "004_augmentCtInputChunk";
subgraph  {
rank=same;
"001_getCtInputChunk" [shape=rect, label="@disk_cache\ngetCtInputChunk"];
"002_cache_dir" [shape=cylinder, label="Cache Dir\n(.pkl.gz)"];
}

subgraph  {
rank=same;
"004_augmentCtInputChunk" [shape=rect, label=augmentCtInputChunk];
"003_LunaDataset" [shape=box3d, label=LunaDataset];
}

}

当我将节点按如下方式放入集群时,布局变为 Z 形:

digraph G {
newrank=true;
subgraph cluster_dsets {
label="dsets.py";
shape=rect;
"001_getCtInputChunk" [label="@disk_cache\ngetCtInputChunk", shape=rect];
"004_augmentCtInputChunk" [label=augmentCtInputChunk, shape=rect];
"002_cache_dir" [label="Cache Dir\n(.pkl.gz)", shape=cylinder];
"003_LunaDataset" [label=LunaDataset, shape=box3d];
}

"001_getCtInputChunk" -> "002_cache_dir";
"002_cache_dir" -> "001_getCtInputChunk";
"001_getCtInputChunk" -> "003_LunaDataset";
"003_LunaDataset" -> "004_augmentCtInputChunk";
subgraph  {
rank=same;
"001_getCtInputChunk" [label="@disk_cache\ngetCtInputChunk", shape=rect];
"002_cache_dir" [label="Cache Dir\n(.pkl.gz)", shape=cylinder];
}

subgraph  {
rank=same;
"004_augmentCtInputChunk" [label=augmentCtInputChunk, shape=rect];
"003_LunaDataset" [label=LunaDataset, shape=box3d];
}

}

如何强制集群节点以与非集群节点相同的 C 形布局?我更喜欢通用解决方案,因为我的实际图表要复杂得多,并且在几个地方都有这个问题。

我目前正在使用 pydot 来生成图表,以防万一。

【问题讨论】:

    标签: graphviz dot pydot


    【解决方案1】:

    我更改了几个小细节以非常接近您正在寻找的结果。 nodesep 在使用 dir=both 时提供了更好的分离效果(而不是两个显式边缘),为箭头留出了足够的空间。当然dir-both 使用rank=same 将主要方向绘制到左侧,因此您正在反转的节点现在以声明的顺序显示。最后,我改变了最左边元素的宽度,让它们对齐得更好。

    digraph G {
    
    nodesep=0.5;
    
    newrank=true;
    
    subgraph cluster_dsets {
        label="dsets.py";
        shape=rect;
        "001_getCtInputChunk" [label="@disk_cache\ngetCtInputChunk", shape=rect, width=1.8];
        "004_augmentCtInputChunk" [label=augmentCtInputChunk, shape=rect];
        "002_cache_dir" [label="Cache Dir\n(.pkl.gz)", shape=cylinder];
        "003_LunaDataset" [label=LunaDataset, shape=box3d, width=1.8];
        }
    
    "001_getCtInputChunk" -> "002_cache_dir" [dir=both];
    "001_getCtInputChunk" -> "003_LunaDataset";
    "003_LunaDataset" -> "004_augmentCtInputChunk";
    
    subgraph  {
        rank=same;
        "001_getCtInputChunk" [label="@disk_cache\ngetCtInputChunk", shape=rect];
        "002_cache_dir" [label="Cache Dir\n(.pkl.gz)", shape=cylinder];
        }
    
    subgraph  {
        rank=same;
        "004_augmentCtInputChunk" [label=augmentCtInputChunk, shape=rect];
        "003_LunaDataset" [label=LunaDataset, shape=box3d];
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 2011-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多