У меня есть кадр данных 11x11, называемый "loc", содержащий координаты положения узла (X, Y и Z) с именами узлов в качестве индекса.У меня есть другой фрейм данных "dist", содержащий расстояние между узлами, в то время как имена узлов указаны как в заголовках столбцов, так и в индексе.Я хочу построить график сети таким образом, чтобы каждый узел был помечен своим именем (индекс loc).Также каждый узел должен быть подключен к каждому другому узлу.
Однако я хочу, чтобы каждое ребро было обозначено расстоянием между двумя узлами.Я
Я создал график, нанес на график узел с метками и нарисовал ребра между ними.Однако не удалось нарисовать метки к легендам.
##### Example data similar to my actual data
coord = np.random.randint(low=1, high=100, size=(11,3))
lab = ['AP', 'STA1', 'STA2', 'STA3', 'STA4', 'STA5', 'STA6', 'STA7',
'STA8', 'STA9', 'STA10']
loc = pd.DataFrame.from_records(coord, columns=['X', 'Y', 'Z'],
index=lab)
d = distance_matrix(loc,loc) # Distance between each device
dist = pd.DataFrame.from_records(d, columns=lab)
dist = dist.set_index(dist.columns)
dist = dist.round(decimals=1)
########## Network Plot without edges
coord = np.random.randint(low=1, high=100, size=(11,3))
lab = ['AP', 'STA1', 'STA2', 'STA3', 'STA4', 'STA5', 'STA6',
'STA7', 'STA8', 'STA9', 'STA10']
loc = pd.DataFrame.from_records(coord, columns=['X', 'Y', 'Z'],
index=lab)
d = distance_matrix(loc,loc) # Distance between each device
dist = pd.DataFrame.from_records(d, columns=lab)
dist = dist.set_index(dist.columns)
dist = dist.round(decimals=1)
# Add the nodes to graph
G=nx.Graph()
for i in range(len(loc)):
G.add_node(loc.index[i])
pos = loc.ix[:,0:2].transpose().to_dict(orient='list')
# Add edges
for i in range(len(loc)):
for j in range(len(loc)):
G.add_edge(loc.index[i], loc.index[j])
# Draw the network
fig, ax = plt.subplots(figsize=(5,5))
ax.axis('equal')
nx.draw_networkx(G, pos=pos, arrows= True, with_labels=True, node_size=600,
node_shape='o', alpha=0.5, font_size=10)
plt.show()
1) Данный код создает требуемый график, но без меток ребер.Я хочу нарисовать метки в центре края или где-нибудь, чтобы быть более читабельным.Помните, что edge_label представляет расстояние между двумя узлами (т. Е. Значение в кадре данных dist, для которого индекс и заголовок столбца имеют одинаковое значение).2) Можем ли мы нарисовать ту же сеть в 3D, так как узлы имеют три кордината (X, Y и Z).Как и в моем коде, я рисую только координаты X и Y.