私はNxN
の通常のネットワークで作業しており、そののエッジの長さの分布をプロットしたいと思います。Python:通常のネットワークのエッジの長さの分布
これは私がネットワークを生成する方法である:
import networkx as nx
import matplotlib.pyplot as plt
N=30 #This can be changed
G=nx.grid_2d_graph(N,N)
pos = dict((n, n) for n in G.nodes())
labels = dict(((i, j), i + (N-1-j) * N) for i, j in G.nodes())
nx.relabel_nodes(G,labels,False)
inds=labels.keys()
vals=labels.values()
inds.sort()
vals.sort()
pos2=dict(zip(vals,inds))
nx.draw_networkx(G, pos=pos2, with_labels=False, node_size = 15)
は、これは私が、エッジの長さの分布を計算する方法である:
def plot_edge_length_distribution(): #Euclidean distances from all nodes
lengths={}
for node in G.nodes():
neigh=nx.all_neighbors(G,node) #The connected neighbors of node n
for n in neigh:
lengths[node]=((pos2[n][1]-pos2[node][1])**2)+((pos2[n][0]-pos2[node][0])**2) #The square distance
items=sorted(lengths.items())
fig=plt.figure()
ax=fig.add_subplot(111)
ax.plot([k for (k,v) in items],[v/(num_edges) for (k,v) in items],'ks-')
ax.set_xscale("linear")
ax.set_yscale("linear")
plt.yticks(numpy.arange(0.94, 1.00, 0.02))
title_string=('Edge Length Distribution')
subtitle_string=('Lattice Network | '+str(N)+'x'+str(N)+' nodes')
plt.suptitle(title_string, y=0.99, fontsize=17)
plt.title(subtitle_string, fontsize=9)
plt.xlabel('Edge Length L')
plt.ylabel('p(L)')
ax.grid(True,which="both")
plt.show()
plot_edge_length_distribution()
これは私が得るものです:辞書として間違って何かがあるlengths
通常のグリッドの性質上、値として1つだけを含める必要があります。
これは私が欲しいものです:普通のグリッドは長さ1のエッジしか持たないので、長さ= 1と言うプロットは確率p(l)= 1を持っています。私のコードで何が間違っていますか?
アイテムに(K、V)のための[K '' items'の値を印刷する最初の試み] 'と' [v /(num_edges)for(k、v)for items] 'のようになります。 – JulienD