Python - 绘制带有节点位置的图形

时间:2017-09-04 03:00:09

标签: python graph-theory networkx

我尝试使用以下信息创建图表。

    n = 6 #number of nodes
    V = []
    V=range(n)# list of vertices
    print("vertices",V)
    # Create n random points

    random.seed(1)
    points = []
    pos = []

    pos = {i:(random.randint(0,50),random.randint(0,100)) for i in V}
    print("pos =", pos)

这使我的职位成为

pos = {0: (8, 72), 1: (48, 8), 2: (16, 15), 3: (31, 97), 4: (28, 60), 5: (41, 48)}

我想在Python中使用Matplotlib绘制带有这些节点和一些边缘(可以在其他计算中获得)的图形。我尝试过如下。但是没有用。

    G_1 = nx.Graph()
    nx.set_node_attributes(G_1,'pos',pos)
    G_1.add_nodes_from(V) # V is the set of nodes and V =range(6) 


    for (u,v) in tempedgelist:
        G_1.add_edge(v, u, capacity=1) # tempedgelist contains my edges as a list ... ex: tempedgelist =  [[0, 2], [0, 3], [1, 2], [1, 4], [5, 3]]


    nx.draw(G_1,pos, edge_labels=True)
    plt.show()

有人可以帮我解决这个问题......

3 个答案:

答案 0 :(得分:2)

我目前没有合适的IDE,但我在您的代码中发现的一个问题是pos应该是字典,请参阅the networkx doc here for setting node attributehere for drawing

试试这个

import networkx as nx
import matplotlib.pyplot as plt

g= nx.Graph()
pos = {0:(0,0), 1:(1,2)}
g.add_nodes_from(range(2))
nx.set_node_attributes(g, 'pos', pos)
g.add_edge(0, 1)
nx.draw(g, pos, edge_labels=True)
plt.show()

让我知道它是否有效。

答案 1 :(得分:2)

pos只需要nx.draw()。您可以使用add_edges_from()设置节点和边。

import networkx as nx
import random

G_1 = nx.Graph()
tempedgelist =  [[0, 2], [0, 3], [1, 2], [1, 4], [5, 3]]
G_1.add_edges_from(tempedgelist)

n_nodes = 6
pos = {i:(random.randint(0,50),random.randint(0,100)) for i in range(n_nodes)}
nx.draw(G_1, pos, edge_labels=True)

graph

注意:如果您需要单独跟踪pointspositions,请写入pos的列表:

points = []
positions = []
for i in pos:
    points.append(pos[i])
    positions.append(i)
    positions.append(pos[i])

答案 2 :(得分:1)

您必须将您的职位列表转换为字典:

pos = dict(zip(pos[::2],pos[1::2]))

顺便说一句,您可以直接从边缘列表构建图形(自动添加节点):

G1 = nx.Graph(tempedgelist)
nx.set_node_attributes(G_1,'capacity',1)