23.1 Ejemplo con matrices de adyacencia
Matriz de adyacencia con numpy (grafo no dirigido, ponderado)
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt
# Matriz de adyacencia (simétrica, es decir, grafo no dirigido)
A = np.array([[0, 1, 0, 2, 0],
[1, 0, 3, 0, 0],
[0, 3, 0, 1, 1],
[2, 0, 1, 0, 0],
[0, 0, 1, 0, 0]], dtype=float)
# Construcción del grafo desde la matriz
G = nx.from_numpy_array(A) # por defecto Graph() no dirigido
# Visualización (ancho de arista proporcional al peso)
plt.figure(figsize=(6, 4))
pos = nx.random_layout(G)
nx.draw_networkx_nodes(G, pos = pos, node_size=600,
node_color='lightgray', edgecolors='black')
nx.draw_networkx_labels(G, pos = pos, font_size=10)
# Escalar el ancho por peso (puede ajustarse el factor)
weights = [G[u][v]['weight'] for u, v in G.edges()]
nx.draw_networkx_edges(G, pos, width=[1.5*w for w in weights])
# Mostrar pesos como etiquetas de aristas
edge_labels = {(u, v): f"{d['weight']:.0f}" for u, v, d in G.edges(data=True)}
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels, font_size=8)
plt.axis('off')
plt.title("Grafo desde matriz de adyacencia (numpy)")
plt.show()