如何在Graphviz中构造多个子图?
我的最终目标是编写一个python脚本,根据一些输入数据自动生成graphviz图。然而,我首先只关注graphviz 这就是我目前拥有的:如何在Graphviz中构造多个子图?,graphviz,dot,Graphviz,Dot,我的最终目标是编写一个python脚本,根据一些输入数据自动生成graphviz图。然而,我首先只关注graphviz 这就是我目前拥有的: digraph G { compound=true; node [shape=box]; edge [dir=none]; subgraph cluster_overall{ subgraph cluster_top{ apple; banana; } subgraph cl
digraph G {
compound=true;
node [shape=box];
edge [dir=none];
subgraph cluster_overall{
subgraph cluster_top{
apple;
banana;
}
subgraph clustermsc{
basket1;
basket2;
label="Baskets";
}
subgraph cluster_bottom{
orange;
kiwi;
}
label="Test";
}
apple -> basket1;
banana -> basket2;
orange -> basket1;
kiwi -> basket2;
}
当前:
这就是我想要的最终图形。根据输入日期,水果数量均匀分布在顶部和底部区域:
最终:
如何将页面结构设置为具有3个静态、独立的部分。目前,水果的位置根据它们指向的节点不断变化
如果我的解释不清楚,请告诉我,我会尽力更好地解释。谢谢
没有足够的声誉来直接发布图像。如果我正确理解你的意思,你需要将具有不可见边缘的簇连接起来,以强制它们的位置 在这里,我在每个集群中添加了一个虚拟节点,因为要连接集群,必须连接这些集群中的节点,然后添加和属性 然后我用不可见的边按正确的顺序连接这些簇。此外,我还为这些边添加了一个非常大的值,以使它们优先于其他边 这就是你需要的吗
digraph G {
compound=true;
node [shape=box];
edge [dir=none];
subgraph cluster_overall{
subgraph cluster_top{
dummy_top [shape=point width=0 style=invis]
apple;
banana;
}
subgraph clustermsc{
dummy_msc [shape=point width=0 style=invis]
basket1;
basket2;
label="Baskets";
}
subgraph cluster_bottom{
dummy_bottom [shape=point width=0 style=invis]
orange;
kiwi;
}
label="Test";
}
dummy_top -> dummy_msc [
style=invis
weight=100
lhead="clustermsc"
ltail="cluster_top"
]
dummy_msc -> dummy_bottom [
style=invis
weight=100
lhead="cluster_bottom"
ltail="clustermsc"
]
apple -> basket1;
banana -> basket2;
orange -> basket1;
kiwi -> basket2;
}
在graphviz中,重要的是生成工具所看到的层次结构,而不是复制您头脑中的逻辑。只需将篮子的边缘翻转到较低的水果上即可:
digraph G {
compound=true;
node [shape=box];
edge [dir=none];
subgraph cluster_overall{
subgraph cluster_top{
apple;
banana;
}
subgraph clustermsc{
basket1;
basket2;
label="Baskets";
}
subgraph cluster_bottom{
orange;
kiwi;
}
label="Test";
}
apple -> basket1;
banana -> basket2;
basket1 -> orange; // !!!
basket2-> kiwi; // !!!
}
给你
如果您想强制某些项目的顺序,例如苹果在香蕉的左边,您可以将您的定义替换为
subgraph cluster_top{
{ rank = same; apple -> banana[ style = invis ] }
}
我基本上想有三个部分是具体的顺序。方法有点复杂,但仍然有效,谢谢!刚接触graphviz,显然对边缘了解不够。感谢您提供的简单解决方案和解释。