как сделать удовлетворительный макет для моих данных (сложная сеть) с помощью networkx или чего-то еще

Я хочу визуализировать свои данные. мои данные выглядят так: мой файл данных: https://gist.github.com/anonymous/5568836 < / а>

4556    5092    0.7000 
4556    4785    0.7500 
4556    5397    0.7000 
4556    5139    0.7500 
4556    5937    0.8333 
4556    6220    0.7000 
4556    5139    0.7500 
4556    6220    0.7063 
4559    4563    0.7500 
4559    4770    0.7500 
4559    4837    0.7500 
4559    5640    0.7500 
4559    4563    0.7500 
4559    4770    0.7500 
4559    4837    0.7500 
4559    5640    0.7500 
4561    4607    1.0000 
4561    4600    0.7500 
4561    4562    0.7500 
4561    5090    0.7500 
4561    5197    1.0000 
4561    5182    0.7500 
4561    5937    0.7500 
4561    6143    0.7500 
4561    5632    1.0000 

первый - исходный узел, второй - целевой узел, а третий - расстояние. Я использую networkx для его визуализации, мой код:

import matplotlib.pyplot as plt
import networkx as nx
G=nx.Graph()
#G=nx.star_graph(800)
filedata1 = open("1.txt",'r')
for line in filedata1:
    datas = line.split()
    G.add_node(int(datas[0]))
    G.add_node(int(datas[1]))
    G.add_edge(int(datas[0]),int(datas[1]),weight=float(datas[2]))
pos=nx.spring_layout(G)
nx.draw_networkx_nodes(G,pos,node_size=20,node_color='r')
plt.axis('off')
plt.savefig("data.png")
plt.show()

и вывод: введите описание изображения здесь

и те же данные, я использую cytoscape, результат: введите описание изображения здесь

Cytoscape, кажется, автоматически кластеризует данные, поэтому я вижу какой-то кластер в networkx, это полный беспорядок.

Я хочу, чтобы выходные данные были такими же, как в cytospace, но выходные данные cytospace имеют ссылки и не могут устанавливать расстояние между узлами.

networkx может устанавливать краевое расстояние между узлами и может только рисовать узлы (это то, что я хочу), но макет совершенно беспорядочный, я хочу показать некоторый кластер :-)

Кажется, что cytospace использует силовую схему, а я использую силовую схему в networkx, но результат совершенно другой.

кто-нибудь может мне помочь? Спасибо


person kuafu    schedule 13.05.2013    source источник


Ответы (1)


Если вы можете установить pydot или pygraphviz, возможно, вам больше повезет с механизмом компоновки graphviz.

E.g.

import matplotlib.pyplot as plt
import networkx as nx
import urllib
data = urllib.urlopen('https://gist.github.com/anonymous/5568836/raw/abc598d68d8fef980c9701b4bc85f5d10a9f71fa/gistfile1.txt')
G = nx.read_weighted_edgelist(data)
pos=nx.graphviz_layout(G)
nx.draw(G,pos,node_size=20,node_color='r',with_labels=False)
plt.savefig("data.png")
plt.show()

введите описание изображения здесь

person Aric    schedule 14.05.2013