Как сделать 4D сюжет в matplotlib без np.meshgrid?
Я знаю, что я могу сделать 4D-график в matplotlib со следующим кодом, с четвертым измерением, показанным в виде карты цветов:
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
fig = plt.figure()
ax = fig.add_subplot(111,projection= '3d' )
x = np.arange(100)/ 101
y = np.sin(x) + np.cos(x)
X,Y = np.meshgrid(x,y)
Z = (X**2) / (Y**2)
A = np.sin(Z)
ax.plot_surface(X,Y, Z, facecolors=cm.Oranges(A))
plt.show()
Но что, если мои данные не являются функцией других данных? Как мне это сделать без np.meshgrid? (Другими словами, мой Z-ряд не может быть функцией выхода X,Y, который является выходом np.meshgrid(x,y), потому что Z не является функцией X и Y.)
1 ответ
Поверхностный график представляет собой отображение 2D точек на 1D значение, т.е. для каждой пары (x,y)
координаты вам нужны ровно одна z
координат. Так что пока не обязательно иметь Z
быть функцией X
а также Y
эти массивы для построения должны иметь одинаковое количество элементов.
Для plot_surface
ограничение должно иметь X
а также Y
как сеточные 2D-данные. Z
не обязательно должен быть 2D, но должен иметь одинаковое количество элементов.
Это требование может быть ослаблено с помощью plot_trisurf
где единственным требованием является то, что существует строгое отображение x,y,z, т.е. i
это значение в X
а также Y
соответствует i
th значение в Z.
В любом случае, даже если нет аналитической функции для отображения X
а также Y
в Z
, Z
все еще должно быть какое-то отображение. Иначе даже сомнительно, какую информацию передал бы полученный сюжет.