Нарисуйте (2D / 3D) график с учетом матрицы смежности и кординатов узлов с помощью matplotlib - PullRequest
0 голосов
/ 17 марта 2020

Я пытаюсь построить график с учетом матрицы смежности и координат узлов с этим кодом ниже, используя matplotlib. Тем не менее, когда я визуализирую график, он не совпадает с матрицей смежности, и в основном отсутствуют некоторые ребра. Есть идеи? NB: на данный момент я строю только 2D-график, поэтому мои Z равны 0, поэтому, если у вас есть какие-либо идеи о том, как это сделать (возможно, с networkx), я также буду признателен за вашу помощь

from scipy.spatial import Delaunay
import numpy as np
#from numpy import sin, cos, sqrt
import matplotlib.tri as mtri
#from sklearn import preprocessing
import mpl_toolkits.mplot3d as plt3d
import matplotlib.pyplot as plt
plt.rcParams.update({'figure.max_open_warning': 0})
plt.switch_backend('agg')

def draw_surface( points_coord, adj):
  '''points_coord.shape: (num_points, coord=3),
    adj.shape:(num_points,num_points)'''
  name= 'img'  
  fig = plt.figure(figsize=(12,10))
  # Plot the surface.
  ax = fig.add_subplot(1, 1, 1, projection='3d')
  #ax.plot_trisurf(triang, z,  cmap=cm.jet)#cmap=plt.cm.CMRmap)

  x = points_coord[:,0]
  y = points_coord[:,1]
  if len(points_coord) == 3:
    z = points_coord[:,2]
  else:
    z = np.zeros_like(points_coord[:,0])  

  max_val = np.max(adj)
  list_edges = []
  #plot lines from edges
  for i in range(adj.shape[0]):
    for j in range(i,adj.shape[1]):
      if adj[i][j]:
        line = plt3d.art3d.Line3D([x[i],x[j]], [y[i],y[j]], [z[i],z[j]], \
          linewidth=0.4, c="black", alpha = round( adj[i,j], 4 ))
        list_edges.append((i,j))
        ax.add_line(line)

  ax.scatter(x,y,z, marker='.', s=15, c="blue", alpha=0.6)
  #ax.view_init(azim=25)
  plt.axis('off')
  plt.show()
  plt.savefig(name+'.png', dpi=120)
  plt.clf()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...