如果具有包含其他集群层次结构的两个集群。这一切都很酷!
我想垂直放置两个簇。虽然其他帖子建议如何垂直放置节点(而不是集群),但我无法将其用于集群。
size参数对我不起作用,但在任何情况下,这似乎都是错误的答案,因为我的python程序通常列出一类可能是任意大小的图。我只想把两个簇放在另一个簇的上面,大小应该是任意的。
一个简单的例子将是最好的。
发布于 2012-06-12 12:54:31
我解决了这个问题。我有两个独立的集群,每个集群都包含一个子集群的层次结构,并被描绘为矩形。如果我将这两个簇添加到我的图中,它们从左到右显示,但我希望它们一个在另一个之上。如果我在每个集群中添加一个节点,就可以使它们处于垂直方向。它们可以在样式修饰符中不可见,但我使用节点作为标签。通过在两个节点之间添加一条边,两个集群以最合理的方式确定自己的方向,以最小化边缘长度,并且它们被垂直重新排列。
在下面的示例中,我创建了另外两个封闭的块,这可能不是必需的,因为您可以在cluster1中添加一个节点,在cluster2中添加另一个节点,但是我发现它使我的图更整洁。
举个例子;
#Assume cluster1 and cluser2 exist
#Create enclosing cluster box
enclosingBlock1=pydot.Cluster('eb1', label='label1',shape='rectangle')
enclosingBlock1.add_subgraph(cluster1)
# Add node to enclosing cluster
node1=pydot.Node('D1',label='Diagram1')
enclosingBlock1.add_node(node1)
#Create second enclosing block
enclosingBlock2=pydot.Cluster('eb2', label='label2',shape='rectangle')
enclosingBlock2.add_subgraph(cluster2)
# Add the node and create the joining edge
node2=pydot.Node('D2',label='Diagram2')
enclosingBlock2.add_node(node2)
edge = pydot.Edge(node1,node2)
graph.add_subgraph(enclosingBlock1)
graph.add_subgraph(enclosingBlock2)
graph.add_edge(edge)
graph.write('xmlSQL.png',prog = 'dot',format = 'png')发布于 2014-09-10 14:33:51
here描述了对集群排名问题的适当解决方案。它涉及到在某些边设置constraint = false,以便dot在对节点进行排名时忽略它们。
在链接的帖子中,启发式地描述了这种方法。在自动生成control-flow graphs时,我使用的方法是在后边设置一个假constraint。
在控制流图中,后向边是从循环体的出口返回到其入口的边。因此,如果您的应用程序包含这样的可识别边,那么您可以将其自动化,否则它仍然可以用作手动选择边的指导原则。
如果无法从有关问题的先验结构信息中获知此类可识别边,但您仍然希望自动解除边的约束,则可以使用深度优先或广度优先树(您的选择)来选择向后的边子集。
https://stackoverflow.com/questions/10943347
复制相似问题