es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Especificando correctamente el gráfico utilizando NetworkX (error: El nodo ‘A’ no tiene posición)

Soy nuevo en NetworkX y me preguntaba si es posible graficar nodos que sean letras en lugar de números.

Actualmente obtengo este error:

NetworkXError: El nodo 'A' no tiene posición

Estoy usando el código que “debería” funcionar con números.

¿Qué cambios debo hacer? No encuentro documentación al respecto.

¡Gracias!

import networkx as nx

# Nodos y aristas
nodos = ["A","B","C","D","E","F","G","H","I","J","K"]
aristas = [("A","B"),("A","C"),("C","D"),("D","F"),("D","G"),("G","H"),("H","I"),("H","J"),("H","K"),("L","E")]

G = nx.Graph()

graph_pos = nx.spring_layout(G)

nx.draw_networkx_nodes(G, graph_pos, nodos, node_size=400, node_color='blue', alpha=0.6)

nx.draw_networkx_labels(G, graph_pos, font_size=12, font_family='sans-serif')

nx.draw_networkx_edges(G, graph_pos, edgelist=aristas, edge_color='green', alpha=0.5)
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible graficar nodos que son letras en lugar de números en NetworkX. El mensaje de error “El nodo ‘A’ no tiene posición” ocurre porque estás tratando de dibujar nodos que no están en el grafo. Para solucionar este error, necesitas agregar los nodos y aristas al grafo antes de dibujarlos.

    Aquí está una versión actualizada del código con los cambios necesarios.

    import networkx as nx
    import matplotlib.pyplot as plt
    
    # Nodos y aristas
    nodos = ["A","B","C","D","E","F","G","H","I","J","K"]
    aristas= [("A","B"),("A","C"),("C","D"),("D","F"),("D","G"),("G","H"),("H","I"),("H","J"),("H","K"),("L","E")]
    
    # Crear un grafo
    G = nx.Graph()
    G.add_nodes_from(nodos)
    G.add_edges_from(aristas)
    
    # Especificar el diseño del grafo
    pos = nx.spring_layout(G)
    
    # Dibujar los nodos y aristas
    nx.draw_networkx_nodes(G, pos, node_color='blue', node_size=400)
    nx.draw_networkx_labels(G, pos, font_size=12, font_family='sans-serif')
    nx.draw_networkx_edges(G, pos, edgelist=aristas, edge_color='green', alpha=0.5)
    
    # Mostrar el grafo
    plt.show()
    

    En este código:

    • G = nx.Graph() crea un grafo vacío
    • G.add_nodes_from(nodos) agrega los nodos al grafo
    • G.add_edges_from(aristas) agrega las aristas al grafo
    • pos = nx.spring_layout(G) especifica el diseño de los nodos utilizando el algoritmo de disposición de resorte
    • nx.draw_networkx_nodes(G, pos, node_color='blue', node_size=400) dibuja los nodos con un color azul y un tamaño de 400
    • nx.draw_networkx_labels(G, pos, font_size=12, font_family='sans-serif') dibuja las etiquetas de los nodos con un tamaño de fuente de 12 y una fuente sans-serif
    • nx.draw_networkx_edges(G, pos, edgelist=aristas, edge_color='green', alpha=0.5) dibuja las aristas con un color verde y una opacidad de 0.5.

    Finalmente, plt.show() muestra el grafo.

Comments are closed.