kongou-ae
6/29/2014 - 3:18 PM

pygraphviz

pygraphviz

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pygraphviz as pgv

height = [1,2,3,4]
width = ["a","b","c","d"]

nodelist = []
subgraph_list = []
i = 0
j = 0

#初期パラメータ
#
#

G = pgv.AGraph(strict=False,directed=True,rankdir='LR')

# 必要なnodeを一括作成
for i in height:
    for j in width:
        nodelist.append(str(i) + j)

#G.add_nodes_from(["1a","2a","3a"],rank='same')
G.add_nodes_from(nodelist)

# 必要なsabgraphを一括作成+横のinvisを引く
for i in height:                                                                                         
    for j in width: 
        subgraph_list.append(str(i) + j)
        
    G_sub = G.add_subgraph(subgraph_list, name = "cluster" + str(i))
    k = 0
    while k < len(subgraph_list) - 1:
        G_sub.add_edge(subgraph_list[k],subgraph_list[k + 1],style='invis')         
        k += 1
#
    subgraph_list = []

# 左端:上から下へ
G.add_edges_from([("1a","2a"),("2a","3a"),("3a","4a")],style='invis')
# 右端:下から上へ
G.add_edges_from([("4c","3c"),("3c","2c"),("2c","1c")],style='invis')
G.add_edges_from([("4d","3d"),("3d","2d"),("2d","1d")],style='invis')
# ななめ:右上から左下へ
G.add_edges_from([("1a","2b"),("2b","3c"),("3c","4d")],style='invis')

G.add_edge("1a","1b")
G.add_edge("1b","2b")
G.add_edge("2b","1c")
G.add_edge("1c","3d")

G.write('s.dot')
G.layout(prog='dot') 
G.draw('s.png')