2012-12-11 21 views
9

Sto scrivendo un programma per tracciare un grafico da una matrice di distanza. Funziona bene. Ora voglio che un determinato nodo e un certo bordo siano di un colore particolare a mia scelta. Come lo faccio?Colorare un nodo particolare in Networkx e Graphviz

Il programma è in Python e usa NetworkX e Graphviz

import networkx as nx 
import numpy as np 
import pickle 
from random import randint 

p_file = open('pickles/distance') 
Dist = pickle.load(p_file) 
p_file.close() 
p_file = open('pickles/names') 
Names = pickle.load(p_file) 
p_file.close() 

dt = [('len', float)] 
A = np.array(Dist)*5 
A = A.view(dt) 

G = nx.from_numpy_matrix(A) 
G = nx.relabel_nodes(G, dict(zip(range(len(G.nodes())),Names)))  

G = nx.to_agraph(G) 
G.node_attr.update(ndcolor="red", node="DC", style="filled") 
G.edge_attr.update(color="none") 
G.draw('P1.png', format='png', prog='neato') 

risposta

14

Dal momento che si sta utilizzando Graphviz a fare il disegno è necessario utilizzare gli attributi che Graphviz capisce. Vedere http://www.graphviz.org/content/attrs

import networkx as nx 
G = nx.Graph() 

G.add_node(1,color='red',style='filled',fillcolor='blue',shape='square') 
G.add_node(2,color='blue',style='filled') 
G.add_edge(1,2,color='green') 
G.node[2]['shape']='circle' 
G.node[2]['fillcolor']='red' 

A = nx.to_agraph(G) 
A.layout() 
A.draw('color.png') 
print A.to_string() 

strict graph { 
    graph [bb="0,0,107.21,46.639"]; 
    node [label="\N"]; 
    1 [color=red, 
     fillcolor=blue, 
     height=0.5, 
     pos="18,28.639", 
     shape=square, 
     style=filled, 
     width=0.5]; 
    2 [color=blue, 
     fillcolor=red, 
     height=0.5, 
     pos="89.21,18", 
     shape=circle, 
     style=filled, 
     width=0.5]; 
    1 -- 2 [color=green, 
     pos="36.338,25.899 47.053,24.298 60.519,22.286 71.18,20.694"]; 
} 

enter image description here

+1

Come si può vedere nel mio codice, io sono l'aggiunta di nodi e spigoli dalla matrice di distanza. Il metodo che hai menzionato non può essere applicato in questo caso. Conosci qualche altro metodo? – Anirudh

+1

È possibile aggiungere gli attributi dopo aver creato il grafico G. Utilizzare G.node [nomenodo] ['colore'] = 'rosso', ecc. – Aric

+1

Oh, ha funzionato! Grazie Aric. Puoi aggiungere questo alla risposta in modo che possa aiutare anche gli altri. – Anirudh

Problemi correlati