使用dot:
渲染时,以下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生成图表,以防相关。
答案 0 :(得分: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];
}
}