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.

Dibujar gráfico en Python con Networkx

Tengo dos listas donde la primera lista tiene los nodos y la segunda lista tiene la distancia entre los nodos (valores). ¿Cómo dibujar un grafo en Networkx usando esas listas?

primera lista:

[0, 1, 2, 3]

segunda lista:

[0.0009, 0.3338, 0.1880, 0.3342, 0.1883, 0.1488]

Mi código:

dicts = {}
keys = range(4)
for i in keys:
    dicts[i] = values[i]
print(dicts)

g = torch_geometric.utils.to_networkx(data, to_undirected=True)
plt.figure(len(data))
nx.draw(g, pos=dicts, with_labels=True)
plt.show()

Obtuve esta salida:

{0: 0.000926, 1: 0.33381733, 2: 0.18802813, 3: 0.33418187}

NetworkXError: El nodo 4 no tiene posición.
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para dibujar un grafo en Networkx con las dos listas dadas, sigue los pasos a continuación:

    1. Importa la librería Networkx y matplotlib.pyplot como plt:
      import networkx as nx
      import matplotlib.pyplot as plt
      
    2. Define los nodos y aristas utilizando las dos listas:
      nodes = [0, 1, 2, 3]
      edges = [(0, 1, 0.0009), (0, 2, 0.3338), (0, 3, 0.1880), (1, 2, 0.3342), (1, 3, 0.1883), (2, 3, 0.1488)]
      

      En la lista edges, los dos primeros elementos de cada tupla representan los nodos conectados por la arista, mientras que el tercer elemento representa la distancia entre ellos.

    3. Crea un objeto de grafo en Networkx y añade los nodos y aristas a él:

      G = nx.Graph()
      G.add_nodes_from(nodes)
      G.add_weighted_edges_from(edges)
      

    4. Dibuja el grafo con etiquetas:
      pos = nx.spring_layout(G)
      nx.draw(G, pos, with_labels=True)
      labels = {i: f'{i}' for i in nodes}
      nx.draw_networkx_labels(G, pos, labels=labels)
      plt.show()
      

      La variable pos utiliza el algoritmo de disposición del muelle para posicionar los nodos en el grafo. El parámetro with_labels en la función nx.draw agrega las etiquetas de nodos al grafo. La función nx.draw_networkx_labels agrega las etiquetas a los nodos utilizando el diccionario labels.

    El código completo para dibujar el grafo en Networkx se muestra a continuación:

    import networkx as nx
    import matplotlib.pyplot as plt
    
    nodes = [0, 1, 2, 3]
    edges = [(0, 1, 0.0009), (0, 2, 0.3338), (0, 3, 0.1880), (1, 2, 0.3342), (1, 3, 0.1883), (2, 3, 0.1488)]
    
    G = nx.Graph()
    G.add_nodes_from(nodes)
    G.add_weighted_edges_from(edges)
    
    pos = nx.spring_layout(G)
    
    nx.draw(G, pos, with_labels=True)
    labels = {i: f'{i}' for i in nodes}
    nx.draw_networkx_labels(G, pos, labels=labels)
    
    plt.show()
    

Comments are closed.