matplotlib 如何使用点列表的(x,y)坐标绘制networkx图?

mlnl4t2r  于 2023-04-21  发布在  其他
关注(0)|答案(3)|浏览(155)

我的点是x,y,我想用点列表中的(x,y)坐标来绘制我的图,这样我就可以看到轴了。

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

xurqigkl

xurqigkl1#

这可以解决你的问题:

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()

结果

后台

对于轴,我使用了上面建议的plt.axis("on")How to make x and y axes appear when using networkx and matplotlib?
另外,我用points列表中的位置替换了spring_layout

igetnqfo

igetnqfo2#

我会尝试使用以下命令打开轴:

limits = plt.axis("on")

这样你就可以使用draw with axis了。

ngynwnxp

ngynwnxp3#

这并不使用networkx,但如果你想快速可视化点并查看边缘,这是非常方便的。

示例代码:

import matplotlib.pyplot as plt

# sample of edges where each node comprises of an x and y coordinate.
edges = [((84, 96), (93, 20)), ((93, 20), (94, 42)), ((94, 42), (98, 88))]

fig, ax = plt.subplots()
for edge in edges:
    x = [edge[0][0], edge[1][0]]
    y = [edge[0][1], edge[1][1]]
    ax.plot(x, y, '-o')

输出示例:

相关问题