3

距離行列からグラフをプロットしようとしています。コードは正常に機能し、画像が表示されます。画像は大きいですが、すべてのノードが一緒にパックされています。ノード間のスペースを増やしたい。ノードを拡大せずにもっと離してほしい。

Graphviz NEATOを試しましたが、問題は100ノードしかサポートされていないことです。1000ノードがあるため、それぞれ100ノードのクラスターが10個表示されていました。

私の全体的なコード-

import networkx as nx
import pickle
import matplotlib.pyplot as plt
print "~~~Unpickle."
p_file = open('pickles/names')
Names = pickle.load(p_file)
p_file.close()
p_file = open('pickles/distance')
Dist = pickle.load(p_file)
p_file.close()

G = nx.Graph()

print "~~~Inserting Nodes."
for store in Names:
    G.add_node(store)

print "~~~Inserting Edges."

for i in range(601):
    for j in range(601):
        if Names[i]!=Names[j]:
            G.add_edge(Names[i],Names[j],weight=Dist[i][j])
print "~~~Drawing Graph."
nx.draw(G,pos,node_color='#A0CBE2',edge_color='none',width=1, edge_cmap=plt.cm.Blues, with_labels=False)
print "~~~Saving Figure."
plt.savefig("graph.png", dpi=500, facecolor='w', edgecolor='w',orientation='portrait', papertype=None, format=None,transparent=False, bbox_inches=None, pad_inches=0.1) 
print "~~~Success!"

出力(エッジとラベルが削除されました): ここに画像の説明を入力してください

600ノードのGraphvixNEATOの出力-

ここに画像の説明を入力してください

4

1 に答える 1

4

図のドキュメントから:

figure(num=None, figsize=(8, 6), dpi=80, facecolor='w', edgecolor='k')

したがって、 figure(figsize=(10,10)) は、800 x 800 ピクセルの 10 インチ x 10 インチのイメージを作成します。

大きなネットワーク グラフを印刷する場合、最も簡単な方法は DPI を増やすことです。

次のようなものを試してください:

plt.figure(num=None, figsize=(10, 10), dpi=1200). This will produce a large image file.

PDFを印刷することもできます

plt.savefig("graph.pdf")

このオプションを使用すると、最終的なグラフはラスタライズされません。

ノード間の距離を変更するには、ノードを小さくするか、レイアウトを変更します。レイアウトの変更はうまく行うのが難しいです。

たとえば、レイアウトでスケールオプションを試してください。

scale = 2

すべてのノード間の距離が 2 倍になります。

したがって、あなたの例では、行を変更します

nx.draw(G)

pos = nx.circular_layout(G, scale=2)
nx.draw(G, pos)

さまざまなレイアウトを使用することもできます。詳細については、ドキュメントを参照してください。

于 2012-12-09T05:29:15.433 に答える