2

重み付けされたネットワーク x を描画すると、距離に関して実際の重みが実際には表されません。不足しているパラメーターやその他の問題があるかどうかに興味がありました。

そのため、次のようにシミュレートされたデータセットを作成することから始めました

from pylab import plot,show
from numpy import vstack,array
from numpy.random import rand
from scipy.cluster.vq import kmeans,vq
from scipy.spatial.distance import euclidean
import networkx as nx
from scipy.spatial.distance import pdist, squareform, cdist


# data generation
data = vstack((rand(5,2) + array([12,12]),rand(5,2)))
a = pdist(data, 'euclidean')

def givexy(index1D, VectorLength):
    return [index1D%VectorLength, index1D/VectorLength]


import matplotlib.pyplot as plt
plt.plot(data[:,0], data[:,1], 'o')
plt.show()

ここに画像の説明を入力

次に、すべてのペア間のユークリッド距離を計算し、その距離を重みとして使用します

G = nx.empty_graph(1)       
for cnt, item in enumerate(a):
    print cnt
    G.add_edge(givexy(cnt, 10)[0], givexy(cnt, 10)[1], weight=item, length=0)


pos = nx.spring_layout(G)
nx.draw_networkx(G, pos)
edge_labels=dict([((u,v,),"%.2f" % d['weight'])
         for u,v,d in G.edges(data=True)])
nx.draw_networkx_edge_labels(G,pos,edge_labels=edge_labels)
#~ nx.draw(G,pos,edge_labels=edge_labels)

plt.show()
exit()

ここに画像の説明を入力

別のプロットが得られる可能性があります-理由は不明ですが、ランダムです。私の主な問題は、ノードの距離です。たとえば、ノード 4 と 8 の間の距離は 0.82 ですが、ノード 7 と 0 の距離よりも長く見えます。

ヒントはありますか?ありがとうございました、

4

1 に答える 1

1

スプリング レイアウトは、ウェイトを距離として明示的に使用しません。一般に、エッジの重みが高いほど、エッジが短くなります。

ただし、位置を明示的に指定したい場合は、次のようにできます。

from numpy import vstack,array
from numpy.random import rand
from scipy.spatial.distance import euclidean, pdist
import networkx as nx
import matplotlib.pyplot as plt

# data generation
data = vstack((rand(5,2) + array([12,12]),rand(5,2)))
a = pdist(data, 'euclidean')

def givexy(index1D, VectorLength):
    return [index1D%VectorLength, index1D/VectorLength]


plt.plot(data[:,0], data[:,1], 'o')

G = nx.Graph()
for cnt, item in enumerate(a):
    print cnt
    G.add_edge(givexy(cnt, 10)[0], givexy(cnt, 10)[1], weight=item, length=0)

pos={}
for node,row in enumerate(data):
    pos[node]=row
nx.draw_networkx(G, pos)
plt.savefig('drawing.png')

ここに画像の説明を入力

于 2013-09-20T15:16:39.580 に答える