我尝试使用以下信息创建图表。
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()
有人可以帮我解决这个问题......
答案 0 :(得分:2)
我目前没有合适的IDE,但我在您的代码中发现的一个问题是pos
应该是字典,请参阅the networkx doc here for setting node attribute和here 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)
注意:如果您需要单独跟踪points
和positions
,请写入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)