是否可以使用指定的固定布局在 Graphviz 中定义子图(簇)
Is it possible to define subgraphs (clusters) in Graphviz with a specified, fixed layout
如何在 Graphviz 中创建 subgraphs/clusters 节点位于特定位置,然后让 Graphviz 根据一组互连边(即不在子图中的边)旋转和排列这些子图?
这是我目前的尝试。问题是我希望能够定义节点的内部排序,例如,子图“3”中的节点排成一行(并且始终按 A-B-C 排序):
graph {
forcelabels=true
color=lightgrey
subgraph cluster_1 {
node[shape=point]
{rank=same r1A r1B}
label="1"
r1A [xlabel="A", fontsize=7]
r1B [xlabel="B", fontsize=7]
}
subgraph cluster_2 {
node[shape=point]
{rank=same r2A r2B}
label="2"
r2A [xlabel="A", fontsize=7]
r2B [xlabel="B", fontsize=7]
}
subgraph cluster_3 {
node[shape=point]
{rank=same volA volB volC}
label="3"
volA [xlabel="A", fontsize=7]
volB [xlabel="B", fontsize=7]
volC [xlabel="C", fontsize=7]
}
}
如果我添加边,我希望 Graphviz 能够旋转子图,但同时保留内部布局和顺序。在这里,使用引擎 fdp
,子图“3”全部重新排列(原因很明显,因为我没有任何修复布局的方法):
那么更高级的“布局”呢?是不是possible/feasible做一个类似微控制器的子图,像这样:
- 不幸的是,none 的 Graphviz 引擎会进行节点旋转。您必须为节点旋转创建一个完整的引擎(架构支持这一点)或一个 pre/post 处理器仅用于节点旋转(稍后)
- 此外,Graphviz 似乎只支持根图级别的文本旋转。根据您的要求,这可能是一个杀手。
- 如果你想使用集群(建议:不),你可能需要使用 dot 引擎来排列你的节点。
- Html-records(可能包含图像)可能是 IC 的“更好”选择。同样,none 个引擎将旋转它们,但是 ...
- 周期很便宜,所以如果没有“太多”的 IC,生成所有可能性(每个 IC 轮换或不轮换)然后眼球评估或编写 post-processing 程序以确定“最佳”结果.
- 另请注意,Graphviz 边缘路由可能无法生成您想要的结果。
如何在 Graphviz 中创建 subgraphs/clusters 节点位于特定位置,然后让 Graphviz 根据一组互连边(即不在子图中的边)旋转和排列这些子图?
这是我目前的尝试。问题是我希望能够定义节点的内部排序,例如,子图“3”中的节点排成一行(并且始终按 A-B-C 排序):
graph {
forcelabels=true
color=lightgrey
subgraph cluster_1 {
node[shape=point]
{rank=same r1A r1B}
label="1"
r1A [xlabel="A", fontsize=7]
r1B [xlabel="B", fontsize=7]
}
subgraph cluster_2 {
node[shape=point]
{rank=same r2A r2B}
label="2"
r2A [xlabel="A", fontsize=7]
r2B [xlabel="B", fontsize=7]
}
subgraph cluster_3 {
node[shape=point]
{rank=same volA volB volC}
label="3"
volA [xlabel="A", fontsize=7]
volB [xlabel="B", fontsize=7]
volC [xlabel="C", fontsize=7]
}
}
如果我添加边,我希望 Graphviz 能够旋转子图,但同时保留内部布局和顺序。在这里,使用引擎 fdp
,子图“3”全部重新排列(原因很明显,因为我没有任何修复布局的方法):
那么更高级的“布局”呢?是不是possible/feasible做一个类似微控制器的子图,像这样:
- 不幸的是,none 的 Graphviz 引擎会进行节点旋转。您必须为节点旋转创建一个完整的引擎(架构支持这一点)或一个 pre/post 处理器仅用于节点旋转(稍后)
- 此外,Graphviz 似乎只支持根图级别的文本旋转。根据您的要求,这可能是一个杀手。
- 如果你想使用集群(建议:不),你可能需要使用 dot 引擎来排列你的节点。
- Html-records(可能包含图像)可能是 IC 的“更好”选择。同样,none 个引擎将旋转它们,但是 ...
- 周期很便宜,所以如果没有“太多”的 IC,生成所有可能性(每个 IC 轮换或不轮换)然后眼球评估或编写 post-processing 程序以确定“最佳”结果.
- 另请注意,Graphviz 边缘路由可能无法生成您想要的结果。