graphviz - 摆脱graphviz输入文件中的传递关系

标签 graphviz

我有包含传递关系的相对复杂的 graphviz 输入文件。不幸的是,这些使输出过于复杂,而没有添加任何附加信息。

有什么简单的方法可以从输入/输出中剥离这些传递关系。

示例输入:

digraph main { 
subgraph cluster_Session_0 {
color = black;
label = "Session_0";
 "Batch_0_0";
}
subgraph cluster_Session_1 {
color = black;
label = "Session_1";
 "Batch_1_0" "Batch_1_1" "Batch_1_2" "Batch_1_3" "Batch_1_4";
}
subgraph cluster_Session_2 {
color = black;
label = "Session_2";
 "Batch_2_0" "Batch_2_1" "Batch_2_2" "Batch_2_3";
}
subgraph cluster_Session_3 {
color = black;
label = "Session_3";
 "Batch_3_0";
}
subgraph cluster_Session_4 {
color = black;
label = "Session_4";
 "Batch_4_0";
}
subgraph cluster_Session_5 {
color = black;
label = "Session_5";
 "Batch_5_0";
}
subgraph cluster_Session_6 {
color = black;
label = "Session_6";
 "Batch_6_0";
}
subgraph cluster_Session_7 {
color = black;
label = "Session_7";
 "Batch_7_0";
}
subgraph cluster_Session_8 {
color = black;
label = "Session_8";
 "Batch_8_0";
}
subgraph cluster_Session_9 {
color = black;
label = "Session_9";
 "Batch_9_0";
}
subgraph cluster_Session_10 {
color = black;
label = "Session_10";
 "Batch_10_0";
}
subgraph cluster_Session_11 {
color = black;
label = "Session_11";
 "Batch_11_0";
}
subgraph cluster_Session_12 {
color = black;
label = "Session_12";
 "Batch_12_0";
}
subgraph cluster_Session_13 {
color = black;
label = "Session_13";
 "Batch_13_0";
}
subgraph cluster_Session_14 {
color = black;
label = "Session_14";
 "Batch_14_0";
}
"Batch_0_0" -> "Batch_1_0";
"Batch_0_0" -> "Batch_1_0";
"Batch_1_0" -> "Batch_1_1";
"Batch_1_1" -> "Batch_1_2";
"Batch_1_2" -> "Batch_1_3";
"Batch_1_3" -> "Batch_1_4";
"Batch_1_4" -> "Batch_2_0";
"Batch_0_0" -> "Batch_2_0";
"Batch_1_4" -> "Batch_2_0";
"Batch_2_0" -> "Batch_2_1";
"Batch_2_1" -> "Batch_2_2";
"Batch_2_2" -> "Batch_2_3";
"Batch_2_3" -> "Batch_3_0";
"Batch_0_0" -> "Batch_3_0";
"Batch_1_4" -> "Batch_3_0";
"Batch_2_3" -> "Batch_3_0";
"Batch_3_0" -> "Batch_4_0";
"Batch_0_0" -> "Batch_4_0";
"Batch_1_4" -> "Batch_4_0";
"Batch_2_3" -> "Batch_4_0";
"Batch_3_0" -> "Batch_4_0";
"Batch_4_0" -> "Batch_5_0";
"Batch_0_0" -> "Batch_5_0";
"Batch_1_4" -> "Batch_5_0";
"Batch_2_3" -> "Batch_5_0";
"Batch_3_0" -> "Batch_5_0";
"Batch_5_0" -> "Batch_6_0";
"Batch_0_0" -> "Batch_6_0";
"Batch_1_4" -> "Batch_6_0";
"Batch_2_3" -> "Batch_6_0";
"Batch_3_0" -> "Batch_6_0";
"Batch_6_0" -> "Batch_7_0";
"Batch_0_0" -> "Batch_7_0";
"Batch_1_4" -> "Batch_7_0";
"Batch_2_3" -> "Batch_7_0";
"Batch_3_0" -> "Batch_7_0";
"Batch_4_0" -> "Batch_7_0";
"Batch_5_0" -> "Batch_7_0";
"Batch_6_0" -> "Batch_7_0";
"Batch_7_0" -> "Batch_8_0";
"Batch_0_0" -> "Batch_8_0";
"Batch_1_4" -> "Batch_8_0";
"Batch_2_3" -> "Batch_8_0";
"Batch_3_0" -> "Batch_8_0";
"Batch_4_0" -> "Batch_8_0";
"Batch_5_0" -> "Batch_8_0";
"Batch_6_0" -> "Batch_8_0";
"Batch_7_0" -> "Batch_8_0";
"Batch_8_0" -> "Batch_9_0";
"Batch_0_0" -> "Batch_9_0";
"Batch_1_4" -> "Batch_9_0";
"Batch_2_3" -> "Batch_9_0";
"Batch_3_0" -> "Batch_9_0";
"Batch_4_0" -> "Batch_9_0";
"Batch_5_0" -> "Batch_9_0";
"Batch_6_0" -> "Batch_9_0";
"Batch_7_0" -> "Batch_9_0";
"Batch_8_0" -> "Batch_9_0";
"Batch_9_0" -> "Batch_10_0";
"Batch_0_0" -> "Batch_10_0";
"Batch_1_4" -> "Batch_10_0";
"Batch_2_3" -> "Batch_10_0";
"Batch_3_0" -> "Batch_10_0";
"Batch_4_0" -> "Batch_10_0";
"Batch_5_0" -> "Batch_10_0";
"Batch_6_0" -> "Batch_10_0";
"Batch_7_0" -> "Batch_10_0";
"Batch_8_0" -> "Batch_10_0";
"Batch_9_0" -> "Batch_10_0";
"Batch_10_0" -> "Batch_11_0";
"Batch_0_0" -> "Batch_11_0";
"Batch_1_4" -> "Batch_11_0";
"Batch_2_3" -> "Batch_11_0";
"Batch_3_0" -> "Batch_11_0";
"Batch_4_0" -> "Batch_11_0";
"Batch_5_0" -> "Batch_11_0";
"Batch_6_0" -> "Batch_11_0";
"Batch_7_0" -> "Batch_11_0";
"Batch_8_0" -> "Batch_11_0";
"Batch_9_0" -> "Batch_11_0";
"Batch_10_0" -> "Batch_11_0";
"Batch_11_0" -> "Batch_12_0";
"Batch_0_0" -> "Batch_12_0";
"Batch_1_4" -> "Batch_12_0";
"Batch_2_3" -> "Batch_12_0";
"Batch_3_0" -> "Batch_12_0";
"Batch_4_0" -> "Batch_12_0";
"Batch_5_0" -> "Batch_12_0";
"Batch_6_0" -> "Batch_12_0";
"Batch_7_0" -> "Batch_12_0";
"Batch_8_0" -> "Batch_12_0";
"Batch_9_0" -> "Batch_12_0";
"Batch_10_0" -> "Batch_12_0";
"Batch_12_0" -> "Batch_13_0";
"Batch_0_0" -> "Batch_13_0";
"Batch_1_4" -> "Batch_13_0";
"Batch_2_3" -> "Batch_13_0";
"Batch_3_0" -> "Batch_13_0";
"Batch_4_0" -> "Batch_13_0";
"Batch_5_0" -> "Batch_13_0";
"Batch_6_0" -> "Batch_13_0";
"Batch_7_0" -> "Batch_13_0";
"Batch_8_0" -> "Batch_13_0";
"Batch_9_0" -> "Batch_13_0";
"Batch_10_0" -> "Batch_13_0";
"Batch_11_0" -> "Batch_13_0";
"Batch_12_0" -> "Batch_13_0";
"Batch_13_0" -> "Batch_14_0";
"Batch_0_0" -> "Batch_14_0";
"Batch_1_4" -> "Batch_14_0";
"Batch_2_3" -> "Batch_14_0";
"Batch_3_0" -> "Batch_14_0";
"Batch_4_0" -> "Batch_14_0";
"Batch_5_0" -> "Batch_14_0";
"Batch_6_0" -> "Batch_14_0";
"Batch_7_0" -> "Batch_14_0";
"Batch_8_0" -> "Batch_14_0";
"Batch_9_0" -> "Batch_14_0";
"Batch_10_0" -> "Batch_14_0";
"Batch_11_0" -> "Batch_14_0";
"Batch_12_0" -> "Batch_14_0";
}

示例输出:
enter image description here

最佳答案

给出来自名为 test.dot 的文件中问题的示例点源tred GraphViz 命令行工具中的工具(有向图的传递减少过滤器)使用以下命令行将其减少为线性图:

tred test.dot | dot -T png > test.png

结果图像:

关于graphviz - 摆脱graphviz输入文件中的传递关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29368344/

相关文章:

graphviz - 在 pygraphviz/dot 的 networkx 包装器中以编程方式指定相同等级的节点

orientation - 将 doxygen 的图形从上到下翻转到从左到右

c++ - 使用 graphviz 绘制自定义 BGL 图

python - graphviz Python Node Shapes - 节点中的饼图

Graphviz/Dot - 如何用独特的颜色标记树中的所有叶子?

graphviz - 为什么 pydot 在 Windows 8 中无法找到 GraphViz 的可执行文件?

python - 网络x : multiple figure with consistent node placement

networking - 将边权重传递给 networkx 中的 graphviz_layout

python - 根据 graphviz_layout 中的权重设置边长

python - 将 graphviz.dot.Digraph 转换为 networkx.Graph