Matplotlib 3D Surface отсутствует 1 обязательный позиционный аргумент: 'Z' - PullRequest
0 голосов
/ 17 декабря 2018

Я пытаюсь создать трехмерную поверхность, как в этом примере: https://gis.stackexchange.com/questions/66367/display-a-georeferenced-dem-surface-in-3d-matplotlib

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.axes3d import *
from matplotlib.mlab import griddata
from matplotlib import cm

data = np.random.random((20, 2))
z = np.random.randint(5, 30, 20)
x = data.T[0]
y = data.T[-1]
xi = np.linspace(min(x), max(x))
yi = np.linspace(min(x), max(y))
X, Y = np.meshgrid(xi, yi)

Z = griddata(x, y, z, xi, yi)

fig = plt.figure()
ax = Axes3D(fig)
ax.scatter3D(x, y, z, c=z)
Axes3D.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet, linewidth=1, antialiased=True)
plt.show()

Я думаю, что мой код похож на пример, но он не работает.Я получил эту ошибку

Ошибка типа: plot_surface () отсутствует 1 обязательный позиционный аргумент: 'Z'

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

1 Ответ

0 голосов
/ 17 декабря 2018

Вам просто нужно использовать 3D-объект оси для построения графика.Для этого замените

Axes3D.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet, linewidth=1, antialiased=True) 

на

ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet, linewidth=1, antialiased=True) 

Я даже не уверен, почему вы в первую очередь используете Axes3D.plot_surface даже после определения объекта ax изkind Axes3D.

PS: Я (используя версию matplotlib 2.2.2) также получил предупреждение

Функция griddata устарела в версии 2.2.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...