Как сделать 3D-график поверхности с помощью matplotlib, Z не рассчитывается с помощью fun c? - PullRequest
0 голосов
/ 27 мая 2020

У меня есть 3 строки данных, используемых как X, Z, Y отдельно. Но данные Z напрямую считываются из файла csv, поэтому они не являются функцией (x, y).

Данные показывают:

[[0.00000000e+00 1.00000000e-01 2.00000000e-01 3.00000000e-01
  3.09958506e-01 3.20000000e-01 3.25000000e-01 3.50000000e-01
  3.75000000e-01 4.00000000e-01 5.00000000e-01 6.00000000e-01
  7.00000000e-01]
 [1.31722083e+06 1.31722083e+06 1.31722083e+06 1.31722089e+06
  1.31722121e+06 1.31722083e+06 1.31722098e+06 1.31722134e+06
  1.31722101e+06 1.31722083e+06 1.31738292e+06 3.92708000e+12
  7.93453000e+12]
 [1.42000000e+02 1.42000000e+02 1.42000000e+02 1.42000000e+02
  1.42000000e+02 1.42000000e+02 1.42000000e+02 1.42000000e+02
  1.42000000e+02 1.42000000e+02 1.42000000e+02 1.42000000e+02
  1.42000000e+02]]

Я сослался на этот ответ: Самый простой способ построить трехмерную поверхность с учетом трехмерных точек

И мой код:

mat = pd.read_csv('results2.csv', header=None,sep=',').values
mat = mat[0:3,:13]
#print(mat)

Sparsity1 = mat[0,:]
agents1 = mat[2,:]
optimal1 = mat[1,:]

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

ax = Axes3D(fig)
#ax.plot_surface(Sparsity1,agents1, optimal1, rstride=1, cstride=1, cmap=cm.viridis)
ax.plot_trisurf(Sparsity1, agents1, optimal1, linewidth=0, antialiased=False)

surf = ax.plot_trisurf(Sparsity1, agents1, optimal1, cmap=cm.jet, linewidth=0)
fig.colorbar(surf)
plt.show()

Как я могу создать трехмерный график с поверхностью? Он всегда говорит мне:

RuntimeError: Error in qhull Delaunay triangulation calculation: singular input data (exitcode=2); use python verbose option (-v) to see original qhull error.

Если я использую np.meshgrid (x, y), я получаю ошибку:

 ValueError: Argument Z must be 2-dimensional” 

Как я могу это исправить?

Заранее спасибо!

...