2013-02-02 17 views
10

Voglio disegnare una rete e voglio che sia senza etichetta con l'eccezione per i nodi cretini.Etichettatura di nodi specifici per Networkx

Quello che ho in questo momento è qualcosa di simile:

nx.draw(G, pos=pos, node_color='b', node_size=8, with_labels=False) 

for hub in hubs: 
    nx.draw_networkx_nodes(G, pos, nodelist=[hub[0]], node_color='r') 

Il codice in questo momento cambia la dimensione e il colore dei nodi della lista hub. Mi piacerebbe etichettarli anche loro.

Ho cercato di aggiungere l'argomento dell'etichetta e impostare il suo valore sul nome dell'hub. ma non funzionava.

Grazie

+2

Se 'elementi hubs' sono già in grafico' G' si dovrebbe chiamare '' nx.draw_networkx' con labels' impostato dizionario che hanno le chiavi come nodi hub e valori etichette/stringhe. – Bula

+0

In realtà ciò che hai detto risolve il problema :) Grazie – amaatouq

risposta

16

Dal commento di Bula la soluzione è abbastanza facile

Il trucco è quello di impostare le etichette in un dizionario in cui la chiave è il nome del nodo e il valore è l'etichetta che desiderate. Pertanto per etichettare solo gli hub, il codice sarà qualcosa di simile a questo:

labels = {}  
for node in G.nodes(): 
    if node in hubs: 
     #set the node name as the key and the label as its value 
     labels[node] = node 
#set the argument 'with labels' to False so you have unlabeled graph 
nx.draw(G, with_labels=False) 
#Now only add labels to the nodes you require (the hubs in my case) 
nx.draw_networkx_labels(G,pos,labels,font_size=16,font_color='r') 

ho ottenuto quello che volevo, che è la seguente: enter image description here

Spero che questo avrebbe aiutato altri python/neofiti NetworkX come me :)

Ancora una volta, grazie Bula

+0

Contento che abbia aiutato, questa informazione era in [documentazione] (http://networkx.github.com/documentation/latest/reference/generated/networkx.drawing.nx_pylab.draw_networkx .html # networkx.drawing.nx_pylab.draw_networkx) ma l'espressione non era chiara, quindi per essere al sicuro puoi solo sperimentare o cercare in 'draw_networkx' [source line] (https://github.com/networkx/networkx /blob/master/networkx/drawing/nx_pylab.py#L262) dove chiama 'draw_networkx_labels' e [lì] (https://github.com/networkx/networkx/blob/master/networkx/drawing/nx_pylab.py# L698) itera su dizionari che fanno le etichette. – Bula