networkxだときれいに表示できない。posに表示スタイルを設定するようですが、spring_layout、spectral_layout、shell_layoutとかありますが、全部キレイな木を表示してくれる感じじゃない。外部のdotファイルとかいうのを読み込むとできるようですが、graphvizというのがあるので、そっちをやってみます。
Networkxの場合
import networkx as nx import matplotlib.pyplot as plt h = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] G = nx.Graph() G.add_nodes_from(h) for i, _ in enumerate(h): if(i - 1) // 2 >= 0: G.add_edge(h[(i - 1) // 2], h[i]) pos = nx.spring_layout(G) nx.draw_networkx(G, pos, with_labels=True) plt.axis("off") plt.show()
Graphvizの場合
インストール
ここからGraphvizをダウンロードしてインストールします。 その後、下記のようにpipインストールします。
$ pip install graphviz
あと、windows10ですが、pathを通す必要がありました。インストールしたフォルダのbinをフォルダのパスを通してください。
サンプルコード
from graphviz import Graph h = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] G = Graph(format='png') G.attr('node', shape='circle') for i in h: G.node(str(i)) for i, _ in enumerate(h): if(i - 1) // 2 >= 0: G.edge(str(h[(i - 1) // 2]), str(h[i])) print(G) G.render('heap')