Построение трехмерного графика Зонтик Уитни
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
U = np.linspace(-100, 100, 1)
V = np.linspace(-100, 100, 1)
X = np.dot(U, V)
Y = U
Z = np.dot(V, V)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z)
plt.show()
ValueError: Argument Z must be 2-dimensional.
Я впервые в жизни строю трехмерные графики, по заданию нужен график Зонтик Уитни. Подскажите пожалуйста, почему не получается и как сделать наилучшим образом?
Ответы (2 шт):
Автор решения: strawdog
→ Ссылка
Вы неверно используете методы linspace и dot. Без явного указания имени параметра, третий аргумент в linspace у вас воспринимается как количество делений, а не шаг. Про dot вам написали в комментариях - вам нужно разобраться с методом meshgrid. Например так:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
U = np.linspace(-100, 100, 100)
V = np.linspace(-100, 100, 100)
X, Y = np.meshgrid(U, V)
Z = (np.ravel(Y)**2).reshape(X.shape)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z)
plt.show()
Это, разумеется, не зонтик Уитни, но для иллюстрации построения 3д-поверхности подойдет
Автор решения: Alex Alex
→ Ссылка
Можно так:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
u = np.linspace(-100, 100, 100)
v = np.linspace(-100, 100, 100)
U, V = np.meshgrid(u, v)
X=U*V
Y=U
Z = V*V
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z)
plt.show()
результат:

