Как добавить ребра в график в NetworkX непосредственно из массива numpy 2D и как визуализировать его в 3D? - PullRequest
0 голосов
/ 16 апреля 2020
  • Я пытаюсь построить график и визуализировать его с помощью библиотеки NetworkX, я использовал часть кода построения графика из Scikit-Image алгоритм случайного обхода , и я построил график с использованием глупости для петель, чтобы добавить края.
    1. Как я могу использовать встроенную функцию add_edges_from() для непосредственного добавления edges_deep, например.
      • dge_deep - это массив 2D numpy с формой (2, X) (источник ==> назначение).
    2. Вы можете увидеть здесь реализована базовая c визуализация, но мне нравится реализовывать более качественную 3D-визуализацию с возможностью поворота фигуры, как мне это сделать, пожалуйста.
  • Заранее спасибо enter image description here
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt
#from mpl_toolkits.mplot3d import Axes3D

vertices = np.arange(3 * 4 * 5).reshape((3, 4, 5))
edges_deep  = np.vstack(( vertices[..., :-1].ravel(), vertices[..., 1:].ravel()))
edges_right = np.vstack(( vertices[:, :-1].ravel(),   vertices[:, 1:].ravel()))
edges_down  = np.vstack(( vertices[:-1].ravel(),      vertices[1:].ravel()))
edges = np.hstack((edges_deep, edges_right, edges_down))
#------------------------------------------------------------------------
G = nx.Graph(__name__="Random Walker")
G.add_nodes_from(vertices.ravel())
#---------------------------------------------------------
for i in range(len(edges_deep[0])):
    G.add_edge(edges_deep [0][i],edges_deep [1][i])
for j in range(len(edges_right[0])):
    G.add_edge(edges_right[0][j],edges_right[1][j])
for k in range(len(edges_down[0])):
    G.add_edge(edges_down [0][k],edges_down [1][k])
#G.add_edges_from(edges_deep)
#G.add_weighted_edges_from()
#------------------------------------------------------------------------
print(G.number_of_nodes(),G.number_of_edges())
#------------------------------------------------------------------------
fig = plt.figure(num='Graph')
plt.subplot(121)
nx.draw(G, with_labels=True, font_weight='bold')
plt.subplot(122)
nx.draw_shell(G, font_weight='bold')
plt.show()
plt.close('all')
#-----------------------------------------------------------------------
...