10

私が持っているデータを使用してネットワークを視覚化し、特定のエッジ長でそれらをグラフ化したいと考えていました。私は Python を使用しており、networkx と igraph を使用してプロットを試みましたが、すべてが固定のエッジ長を割り当てているようです。

a.) コードが間違っていたのか、それともパッケージが実際に機能していないのか疑問に思っています。networkx または igraph の指定されたエッジ長をどのように適切に実装しますか?

b.) networkx と igraph でそれができない場合、どのパッケージを提案できますか? (できれば、80,000 ノード以上を運ぶことができるもの。)

ありがとう!

4

1 に答える 1

8

これはうまくいくはずです:

import networkx as NX
import pygraphviz as PG

G = PG.AGraph()
nlist = "A B C D E".split()
a, b = "A A B", "B C D"
elist = zip(a.split(), b.split())

G.add_nodes_from(nlist)
G.add_edges_from(elist)
G.node_attr.update(color="red", style="filled")
G.edge_attr.update(color="blue", len="2.0", width="2.0")

print(G.edge_attr)
# returns {'color': 'red', 'width': '', 'len': '2.0'}

# add new edge with custom length (all others have length=2.0):
G.add_edge("C", "E", len="3.0", color="blue", width="2.0")

edge = G.get_edge("C", "E")
print(edge_attr)
# returns {'color': 'blue', 'width': '2.0', 'len': '3.0'}

# and you can confirm that introspection by drawing & printing this graph:
G.draw('somefolderandfilename.png', format='png', prog='neato')

ほとんどのグラフ描画アルゴリズムは SMACOF のいくつかのバージョンを使用しますが、もちろんエッジの長さは異なります。ただし、graphviz レイアウト エンジン 'neato' (上記の 'draw' の 2 番目の引数として提供される) は、可能な限り、ユーザーが設定したエッジの長さを保持する必要があります。

ここで使用したライブラリは、確かに 80,000 ノードを処理するのに十分頑丈です。

于 2009-12-14T01:09:11.633 に答える