comment tracer un graphe networkx en utilisant les coordonnées (x, y) de la liste de points?
Nov 24 2020
J'ai des points comme x, y et je veux tracer mon graphique en utilisant les coordonnées (x, y) de ma liste de points afin que je puisse voir l'axe. voici mon code et photo du graphique
import networkx as nx
import matplotlib.pyplot as plt
def add_edge_to_graph(G,e1,e2,w):
G.add_edge(e1,e2,weight=w)
G=nx.Graph()
points=[(1, 10), (8, 10), (10, 8), (7, 4), (3, 1)] #(x,y) points
edges=[(0, 1, 10), (1, 2, 5), (2, 3, 25), (0, 3, 3), (3, 4, 8)]#(v1,v2, weight)
for i in range(len(edges)):
add_edge_to_graph(G,points[edges[i][0]],points[edges[i][1]],edges[i][2])
pos = nx.spring_layout(G)
nx.draw(G,pos=pos,node_color='k')
nx.draw(G, pos=pos, node_size=1500) # draw nodes and edges
nx.draw_networkx_labels(G, pos=pos) # draw node labels/names
# draw edge weights
labels = nx.get_edge_attributes(G, 'weight')
nx.draw_networkx_edge_labels(G, pos, edge_labels=labels)
plt.axis()
plt.show()
https://i.imgur.com/LbAGBIh.png
Réponses
1 Sparky05 Nov 24 2020 at 13:00
Cela devrait résoudre votre problème:
import networkx as nx
import matplotlib.pyplot as plt
def add_edge_to_graph(G, e1, e2, w):
G.add_edge(e1, e2, weight=w)
G = nx.Graph()
points = [(1, 10), (8, 10), (10, 8), (7, 4), (3, 1)] # (x,y) points
edges = [(0, 1, 10), (1, 2, 5), (2, 3, 25), (0, 3, 3), (3, 4, 8)] # (v1,v2, weight)
for i in range(len(edges)):
add_edge_to_graph(G, points[edges[i][0]], points[edges[i][1]], edges[i][2])
# you want your own layout
# pos = nx.spring_layout(G)
pos = {point: point for point in points}
# add axis
fig, ax = plt.subplots()
nx.draw(G, pos=pos, node_color='k', ax=ax)
nx.draw(G, pos=pos, node_size=1500, ax=ax) # draw nodes and edges
nx.draw_networkx_labels(G, pos=pos) # draw node labels/names
# draw edge weights
labels = nx.get_edge_attributes(G, 'weight')
nx.draw_networkx_edge_labels(G, pos, edge_labels=labels, ax=ax)
plt.axis("on")
ax.set_xlim(0, 11)
ax.set_ylim(0,11)
ax.tick_params(left=True, bottom=True, labelleft=True, labelbottom=True)
plt.show()
Résultat

Backround
Pour l'axe, j'ai utilisé plt.axis("on")
comme déjà suggéré ci-dessus avec Comment faire apparaître les axes x et y lors de l'utilisation de networkx et matplotlib?
De plus, j'ai remplacé le spring_layout
par les positions de votre points
liste.
HenryMont Nov 24 2020 at 12:39
J'essaierais d'activer l'axe avec:
limits = plt.axis("on")
Pour que vous puissiez utiliser le dessin avec axe.