Как сделать 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 все еще должно быть какое-то отображение. Иначе даже сомнительно, какую информацию передал бы полученный сюжет.

Другие вопросы по тегам