Я создал U-Matrix. Для тех из вас, кто не знает, что такое u-матрица: думайте о ней как о шестиугольной плоскости, где каждый шестиугольник раскрашен в оттенок серого, который отражает его высоту. U-матрица выглядит следующим образом:
Я создал график, используя библиотеку matplotlib.collections.PatchCollection
, а затем раскрасил участки (т.е. шестиугольники), используя set_array(u_heights)
. Вероятно, есть более простой способ достижения этого. Совсем недавно я наткнулся на функцию hexbins. В любом случае: я хочу изменить этот сюжет. Вместо того, чтобы раскрасить шестиугольники в разные оттенки серого, я хочу сделать эту визуализацию трехмерной и построить высоту, которая представляет высоту u. Вы можете увидеть пример того, что я хочу, на странице 7 this pdf. Любые идеи о том, как этого добиться?
Поскольку в комментариях было предложено, что то, что я хочу достичь, может соответствовать mpl_toolkits.mplot3d.Axes3D.plot_surface
, я хотел попробовать это. Мне даны переменные x, y, z, где x и y соответствуют координатам положения шестиугольника, а z соответствует u-высоте. Однако для функции plot_surface
требуются входы 2D. Итак, первая попытка состоит в использовании plot_trisurf
, который делает то же самое, что и plot_surface
, но для этого нужны только точки в качестве входных данных:
def plot_surface(self):
x = coords[:,0] # coords is a 2D numpy array
y = coords[:,1]
z = uHeights # uHeights is a 1D numpy array
#X, Y, Z = np.meshgrid(x, y, z)
fig = plt.figure()
ax = Axes3D(fig)
ax.plot_trisurf(x, y, z)
Хорошо. Эта функция НАВСЕГДА строит график. Я на самом деле должен был выйти из казни. Я попытался построить это только для сетки 2 х 2. Итак, я не знаю, почему это не закончится sh. В конце концов, из c функция plot_surface
будет лучше. Я могу создать 2D-ввод для моих координат x и y, используя функцию meshgrid
. однако использование функции для z невозможно, поскольку я знаю только значения uHeights для каждого значения (x, y). Так что, думаю, мне придется придерживаться plot_trisurf
.