2013-02-24 7 views
0

В настоящее время у меня есть список триплетов формы (node1, node2, weight_of_edge). Есть ли какой-то способ для меня построить так, чтобы узлы, у которых есть грань между ними, оставались близко друг к другу в макете?networkx layout

+0

Я не знаю такой функциональности в Matplotlib. Существуют очень мощные средства визуализации сети, которые обеспечивают это. Посмотрите на [Cytoscape] (например, http://www.cytoscape.org/). –

ответ

1

Вы должны взглянуть на библиотеку NetworkX, которая предоставляет множество инструментов для создания и управления сетями.

Основной пример на основе списка триплетов:

list_of_triplets = [("n1", "n2", 4), 
        ("n3", "n4", 1), 
        ("n5", "n6", 2), 
        ("n7", "n8", 4), 
        ("n1", "n7", 4), 
        ("n2", "n8", 4), 
        ("n8", "n9", 6), 
        ("n4", "n9", 12), 
        ("n4", "n6", 1), 
        ("n2", "n7", 4), 
        ("n1", "n8", 4)] 

# The line below in the code change the list in a format that take 
# a weight argument in a dictionary, to be computed by NetworkX 

formatted_list = [(node[0], node[1], {"weight":node[2]}) for node in list_of_triplets] 

Чтобы нарисовать график:

import matplotlib.pyplot as plt 
import networkx as nx 

G = nx.Graph() 
G.add_edges_from(formatted_list) 
nx.draw(G) 
plt.show() 

nodes