2012-11-22 9 views
23

Mam duży wykres węzłów i skierowanych krawędzi. Ponadto mam dodatkową listę wartości przypisanych do każdego węzła.Narysuj inny kolor dla węzłów w networkx na podstawie ich wartości węzła

Chcę teraz zmienić kolor każdego węzła zgodnie z jego wartością węzła. A więc np. Węzły rysunkowe o bardzo wysokiej wartości czerwonej i te o niskiej wartości niebieskiego (podobne do mapy termicznej). Czy jest to w jakiś sposób łatwe do osiągnięcia? Jeśli nie z networkx, jestem również otwarty na inne biblioteki w Pythonie.

Odpowiedz

42
import networkx as nx 
import numpy as np 
import matplotlib.pyplot as plt 

G = nx.Graph() 
G.add_edges_from(
    [('A', 'B'), ('A', 'C'), ('D', 'B'), ('E', 'C'), ('E', 'F'), 
    ('B', 'H'), ('B', 'G'), ('B', 'F'), ('C', 'G')]) 

val_map = {'A': 1.0, 
      'D': 0.5714285714285714, 
      'H': 0.0} 

values = [val_map.get(node, 0.25) for node in G.nodes()] 

nx.draw(G, cmap=plt.get_cmap('jet'), node_color=values) 
plt.show() 

daje

enter image description here


Numery values są połączone z węzłami G.nodes(). Oznacza to, że pierwsza liczba w values jest związana z pierwszym węzłem w G.nodes() i podobnie dla drugiego, i tak dalej.

+0

Dzięki, to jest naprawdę pomocne. Wciąż nie jestem do końca pewien, jak dokładnie tablica node_color jest mapowana do odpowiedniego węzła. Tak więc np. Mam 3 węzły z odpowiednią etykietą (13, 557, 35). Jak dokładnie teraz przypisuję różne kolory węzłów? – fsociety

+1

Wartości dostarczane do 'node_color' powinny być w tej samej kolejności, co węzły wymienione w' G.nodes() '. Zmodyfikowałem kod, aby pokazać, jak można dowolnie mapować wartości "val_map" i wygenerować listę "wartości" w prawidłowej kolejności. – unutbu

+0

Jeśli mam bardzo duży wykres, jak znaleźć, który kolor odpowiada której wartości? – MysticForce

Powiązane problemy