Интерполяция трехмерной поверхности, известной своими угловыми узлами, и раскраска ее с помощью карты цветов

Я хочу построить трехмерное представление экспериментальных данных для отслеживания деформации мембраны. Экспериментально известны только угловые узлы. Однако я хочу построить деформацию всей структуры и поэтому я хочу интерполировать мембрану, чтобы получить хорошую цветовую карту. Осмотрев вокруг, я подошел почти к нему со следующим кодом:

import numpy
from mpl_toolkits.mplot3d import Axes3D
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
import matplotlib.pyplot as plt
from matplotlib import cm
from scipy.interpolate import griddata

x=numpy.array([0, 0, 1, 1])
y=numpy.array([0.5, 0.75, 1, 0.5])
z=numpy.array([0, 0.5, 1,0])

fig = plt.figure()
ax = Axes3D(fig)
verts = [zip(x, y, z)]
PC = Poly3DCollection(verts)
ax.add_collection3d(PC)

xi = numpy.linspace(x.min(),x.max(),20)
yi = numpy.linspace(y.min(),y.max(),20)
zi = griddata((x,y),z, (xi[None,:], yi[:,None]), method='linear')
xig, yig = numpy.meshgrid(xi, -yi)
ax.plot_surface(xig, yig, zi, rstride=1, cstride=1,  linewidth=0,cmap=plt.cm.jet,norm=plt.Normalize(vmax=abs(yi).max(), vmin=-abs(yi).max()))
plt.show()

и получите следующий сюжет:

Синий многоугольник - это поверхность, известная своими угловыми узлами и которую я хочу раскрасить. Раскрашенная поверхность - мой лучший результат. Тем не менее, есть черные полигоны в верхней части поверхности, которые меня беспокоят. Я думаю, что это может быть связано с тем, что поверхность не соответствует сетке, и поэтому четвертый угол - это Нан.

Есть ли обходной путь, чтобы избежать этих черных треугольников или, что еще лучше, лучше нанести на карту цвет поверхности, известной только ее угловым узлам?

РЕДАКТИРОВАТЬ: Вот рисунок с решением триангуляции, приведенным в моем первом комментарии с помощью следующей команды

triang = tri.Triangulation(x, y)
ax.plot_trisurf(x, y, z, triangles=triang.triangles, cmap=cm.jet,norm=plt.Normalize(vmax=abs(yi).max(), vmin=-abs(yi).max()))

Ответы на вопрос(2)

Ваш ответ на вопрос