2012-12-11 15 views
9

Piszę program do wykreślania wykresu z matrycy odległości. Działa dobrze. Teraz chcę, aby pewien węzeł i pewna krawędź były określonego koloru z mojego wyboru. Jak mogę to zrobić?Kolor określonego węzła w Networkx i Graphviz

Program jest w Pythonie i korzysta NetworkX i 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') 

Odpowiedz

14

Ponieważ używasz Graphviz wykonać rysunek trzeba użyć atrybuty Graphviz rozumie. Zobacz 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() 

Daje

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

Jak widać w moim kodu, dodaję węzły i krawędzie z matrycy na odległość. Wspomniana metoda nie może być zastosowana w tym przypadku. Czy znasz inną metodę? – Anirudh

+1

Możesz dodać atrybuty po utworzeniu wykresu G. Użyj G.node [nazwa_węzła] ['color'] = 'czerwony', itd. – Aric

+1

Oh działało! Dziękuję Aric. Czy możesz dodać to do odpowiedzi, aby pomóc innym. – Anirudh

Powiązane problemy