Есть 3 массива.Мне нужно сделать 3d поверхность.Как это исправить? - PullRequest
3 голосов
/ 30 марта 2019

Мне нужно создать трехмерную поверхность графика зависимости площади от двух параметров (А и С).Функция, которая возвращает область графика, называется get_square (param_a, param_c). У меня есть 2 массива с параметрами C и A

Python 3.5. Я получил ValueError: Аргумент Z должен быть 2-мерным.Я не понимаю, что мне нужно делать.Я пытался по-разному, но каждый раз, когда у меня не получалось

a = [70, 71,72,73,74,75,76,77,78,79,80,81,82,82,83,84,85,86,87,88,89]
c = [-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
result_area = []
for i in range(len(a)):
    result_area.append(get_area(a=a[i], c=c[i])
# in my case result_area is  [8.37489748679822,
 8.414865734605842,
 8.425909102940215,
 8.409343482533345,
 8.36477993434033,
 8.291545577425058,
 8.19076737834649,
 8.060984569963367,
 7.899169690316133,
 7.709739062145273,
 7.483527412013634,
 7.22563128509485,
 6.923664590863622,
 6.579039142980158,
 6.180241810498949,
 5.723812526395248,
 5.195589966465734,
 4.561306845225758,
 3.7683571369877655,
 2.696998299888183]

# then i try to create 3d surface:

from mpl_toolkits.mplot3d import axes3d

fig = plt.figure(figsize = (10,10))
ax = fig.add_subplot(111, projection='3d')
a = np.array(a)
c = np.array(c)
result = np.array(result_area )

ax.plot_surface(a, c, result_area , rstride=10, cstride=10)

plt.show()

Я ожидаю, что 3D-график поверхности, как там https://matplotlib.org/mpl_examples/mplot3d/surface3d_demo3.png (Конечно, я понимаю, что, поскольку у меня есть график зависимостиплощадь по двум параметрам, поверхность будет разной)

1 Ответ

1 голос
/ 30 марта 2019

Попробуйте это - для x, y и z вам нужны матрицы для построения графика.Специально для вашей оси z вам нужна матрица, чтобы каждая комбинация x, y отображалась в координату az.

from mpl_toolkits.mplot3d import axes3d

x = [70, 71,72,73,74,75,76,77,78,79,80,81,82,82,83,84,85,86,87,88]
y = [-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

def get_area(x, y):
    return x+y

x = np.array(x)
y = np.array(y)
X, Y = np.meshgrid(x, y)  # creates 2 matrices: one repeats x, the other repeats y
Z = get_area(X, Y)

fig = plt.figure(figsize = (10,10))
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z , rstride=10, cstride=10)
plt.show()

См. Здесь: графики поверхности в matplotlib

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