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')