como traçar um gráfico networkx usando as coordenadas (x, y) da lista de pontos?
Nov 24 2020
Tenho pontos como x, y e quero plotar meu gráfico usando as coordenadas (x, y) da minha lista de pontos para que eu possa ver o eixo. aqui estão meu código e foto do gráfico
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
Respostas
1 Sparky05 Nov 24 2020 at 13:00
Isso deve resolver seu problema:
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()
Resultado

Backround
Para o eixo, usei plt.axis("on")
como já sugerido acima junto com Como fazer os eixos xey aparecerem ao usar networkx e matplotlib?
Além disso, substituí o spring_layout
pelas posições da sua points
lista.
HenryMont Nov 24 2020 at 12:39
Eu tentaria ligar o eixo com:
limits = plt.axis("on")
Para que você possa usar o desenho com eixo.
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
Christopher Nolan uma vez se arrependeu de ter lido o 'roteiro de Pulp Fiction' de Quentin Tarantino