2012-06-08 2 views
1

다른 클러스터의 계층을 포함하는 두 개의 클러스터가있는 경우. 매우 시원한 누구나!포인트 클러스터 위치 지정

세로로 두 개의 클러스터를 배치하고 싶습니다. 다른 게시물은 노드 (클러스터가 아님)를 세로로 배치하는 방법을 제안하지만 클러스터에서이 기능을 사용할 수는 없습니다.

크기 매개 변수는 나를 위해 작동하지 않지만 어떤 경우에는 내 대답은 파이썬 프로그램이 일반적으로 어떤 크기일지도 모르는 그래프 클래스를 설정하기 때문에 잘못된 대답 인 것처럼 보입니다. 두 개의 클러스터를 다른 클러스터의 맨 위에 놓고 크기를 지정해야합니다.

간단한 예가 가장 좋습니다.

답변

1

나는이 문제를 해결했다. 나는 하위 클러스터의 계층을 포함하고 직사각형으로 묘사 된 두 개의 독립 클러스터를 가지고있다. 그래프에 두 개의 클러스터를 추가하면 왼쪽에서 오른쪽으로 나타나지만 다른 클러스터의 상단에 하나씩 넣기를 원합니다. 각 클러스터에 노드를 추가 할 경우 세로 방향으로 가져 오려면. 그들은 스타일 수정 자에서 보이지 않게 할 수 있지만 레이블로 노드를 사용했습니다. 두 노드 사이에 모서리를 추가하면 두 클러스터가 모서리 길이를 최소화하는 가장 현명한 방법으로 방향을 지정하고 세로로 재 배열됩니다.

아래의 예제에서 나는 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') 
0

순위 클러스터의 문제에 대한 적절한 해결책 here을 설명한다. 특정 가장자리에 constraint = false을 설정해야하므로 dot은 노드 순위를 지정할 때 무시합니다.

링크 된 게시물에서 접근법은 경험적으로 설명됩니다. 그 방법은 저를 위해 control flow graphs을 생성 할 때 자동으로 거짓을 constraint으로 설정하는 것입니다. CFG에서 후방 모서리는 루프 본문의 출구에서 해당 항목으로 돌아 오는 에지이므로 응용 프로그램에서 식별 가능한 모서리를 포함하는 경우 자동화 할 수 있습니다. 그렇지 않으면 수동으로 모서리를 선택하는 기본 원칙으로 계속 사용할 수 있습니다.

이러한 식별 가능한 모서리가 문제에 대한 선험적 인 구조 정보로 알려지지 않았지만 여전히 가장자리의 비 연속성을 자동화하려는 경우 DFS 또는 BFS 트리 (선택 사항)를 사용하여 모서리의 하위 집합을 선택할 수 있습니다 뒤로.