Как построить 3D u-Matrix в python - PullRequest
0 голосов
/ 26 марта 2020

Я создал U-Matrix. Для тех из вас, кто не знает, что такое u-матрица: думайте о ней как о шестиугольной плоскости, где каждый шестиугольник раскрашен в оттенок серого, который отражает его высоту. U-матрица выглядит следующим образом:

u-matrix

Я создал график, используя библиотеку 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.

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