2016-03-31 21 views
1

ben takip mesafesi matrisi vardır:Yaratma grafiği: - tutarsızlık Python

delta = 
[[ 0.   0.71370845 0.80903791 0.82955157 0.56964983 0.   0.  ] 
[ 0.71370845 0.   0.99583115 1.   0.79563006 0.71370845 
    0.71370845] 
[ 0.80903791 0.99583115 0.   0.90029133 0.81180111 0.80903791 
    0.80903791] 
[ 0.82955157 1.   0.90029133 0.   0.97468433 0.82955157 
    0.82955157] 
[ 0.56964983 0.79563006 0.81180111 0.97468433 0.   0.56964983 
    0.56964983] 
[ 0.   0.71370845 0.80903791 0.82955157 0.56964983 0.   0.  ] 
[ 0.   0.71370845 0.80903791 0.82955157 0.56964983 0.   0.  ]] 

Ve bir grafik olarak temsil edecek networkx kütüphaneyi kullanmaya çalışıyorum. Ancak

import networkx as nx 

G = nx.from_numpy_matrix(delta) 
pos = nx.random_layout(G) 

plt.figure(figsize=(7, 7)) 
for k, p in pos.iteritems(): 
    plt.scatter(p[0], p[1], marker='o', c=colors[k], s=50, edgecolor='None') 
lgd = plt.legend(markers, labels, numpoints=1, bbox_to_anchor=(1.17, 0.5)) 
plt.tight_layout() 
plt.axis('equal') 
pt.show() 

, ben nelerle değil gördükleri: Bu benim kodudur. Örneğin, bu çıktıyı düşünün:

delta itibaren

enter image description here

, düğüm 1 düğüm 6 ve 7 ile aynı noktada olduğunu ve uzak düğüm 4. I çıkış arsa içinde görmüyorum. Ayrıca, fazla mesai çalıştırıyorum, başka bir çıktıyla sonuçlanır. Bu bekleniyor, ancak mesafeye saygı duyulmuyor gibi görünüyor. Aşağıdaki çizimde, örneğin, 1 ila 6,7 ​​ve 4 arasındaki mesafeler değişti.

enter image description here

nedenini anlayamıyorum.

cevap

1

Biraz daha tutarlı bir düzen kullanabilirsiniz, belki shell_layout() veya circular_layout(). Teknik olarak, genel bir soyut grafikte, tasvir edilen konumun gerçek bir anlamı yoktur ve bu işlevlerin her biri, bu gerçeği yansıttığınız her seferinde küçük bir varyansa sahip olma eğilimindedir. Önceden belirlenmiş bazı modellere göre düğümleri makul bir şekilde yerleştirirler.

Eğer tutarlı bir yerleşim istiyorsanız, bunu kendiniz yapmanız gerekecektir.

Düzen işlevlerinin üretildiği yapıyı anlayın ve daha mantıklı bir görselleştirme sağlamak için veri anlayışınızı kullanın. Bu işlevler, uzunluk 2'nin listeleri olan düğümlerde anahtarlanmış bir sözlük oluşturur. İlk giriş, düğümün x konumunu, ikincisini, y'yi belirtir.
Bu örnekte, ofisler arasında ağ bağlantılarının grafiği.

pos=nx.spring_layout(G) 
print pos 

Ancak

{'A': [1, 12], 'C': [5, 8], 'B': [4, 11], 'E': [8, 3], 'D': [8, 7], 'F': [6, 1]} 

gibi bir şey verim olabilir, benim veri citites temsil beri onların fiziksel konumları temsil yerlerde düğümleri görüntülemek için mantıklı olduğunu biliyoruz, bu yüzden, bunun yerine, gözlerimi inşa kendi sözlüğü (her düğümün başlangıçta 'x' ve 'y') nitelikleri vardır.

pos = {} 
for node in G.nodes(): 
    pos[node] = [G.node[node]["x"], G.node[node]["y"]] 

Bu, düğümleri her seferinde aynı şekilde görüntüler. Matrisinize göre benzer bir şekilde kendi pos sözlüğünüzü oluşturun.

+1

Teşekkür ederiz, @Culex. – pceccon

1

nx.random_layout kullanıyorsunuz, bu da grafiğin köşe noktalarını tekdüze dağıtımdan alınan rastgele konumlara yerleştiriyor. Uzaklıkların verilen mesafelere yaklaşacak şekilde köşeleri konumlandırmayı deneyen nx.spring_layout, nx.fruchterman_reingold_layout gibi başka düzenler de vardır.

+0

Bu benim ilk denemem oldu, A.P. Aynı problem .. – pceccon

+0

http://stackoverflow.com/questions/36318742/visualizing-distance-matrix-using-tsne-and-graph-python – pceccon