¿Cómo establecer colores para los nodos en NetworkX?

2 minutos de lectura

avatar de usuario
gokhan arik

Creé mi gráfico, todo se ve muy bien hasta ahora, pero quiero actualizar el color de mis nodos después de la creación.

Mi objetivo es visualizar DFS, primero mostraré el gráfico inicial y luego colorearé los nodos paso a paso a medida que DFS resuelve el problema.

Si alguien está interesado, el código de muestra está disponible en Github

avatar de usuario
Abdalá Sobehy

Todo lo que necesita es especificar un mapa de colores que asigne un color a cada nodo y enviarlo a la función nx.draw. Para aclarar, para un nodo de 20 quiero colorear los primeros 10 en azul y el resto en verde. El código será el siguiente:

G = nx.erdos_renyi_graph(20, 0.1)
color_map = []
for node in G:
    if node < 10:
        color_map.append('blue')
    else: 
        color_map.append('green')      
nx.draw(G, node_color=color_map, with_labels=True)
plt.show()

Encontrarás el gráfico en la imagen adjunta.ingrese la descripción de la imagen aquí.

  • ¿Cómo manejamos los duplicados? Si hay duplicados, se eliminan automáticamente del gráfico, pero se siguen agregando valores a color_map.

    – Harsha Reddy

    13 de septiembre de 2019 a las 13:25

  • Publiqué una respuesta (stackoverflow.com/a/59473049/1904943) sobre la creación de un dígrafo NetworkX a partir de un marco de datos de Pandas, con los nodos coloreados según la columna del marco de datos.

    – Victoria Estuardo

    24 de diciembre de 2019 a las 20:21

  • ¿Te refieres a los ID de los nodos? No importa, seguiría funcionando

    – Abdalá Sobehy

    6 oct 2020 a las 23:49

  • Estoy tratando de utilizar la misma metodología aquí, pero dado que algunos de mis bordes son bidireccionales, recibo este mensaje de error: ValueError: el argumento ‘c’ tiene 105 elementos, lo que es inconsistente con ‘x’ e ‘y’ con tamaño 66. ¿Hay alguna solución en networkx?

    – Ceniza

    3 de febrero a las 0:46

Referirse a node_color parámetro:

nx.draw_networkx_nodes(G, pos, node_size=200, node_color="#00b4d9")

ha sido respondido antes, pero también puedes hacer esto:

# define color map. user_node = red, book_nodes = green
color_map = ['red' if node == user_id else 'green' for node in G]        
graph = nx.draw_networkx(G,pos, node_color=color_map) # node lables

¿Ha sido útil esta solución?