実験データの 3D 表現を構築して、膜の変形を追跡したいと考えています。実験的には、コーナー ノードのみがわかっています。ただし、構造全体の変形をプロットしたいので、膜を補間してその素晴らしいカラーマップを有効にしたいのです。周りを検索することで、次のコードでほぼそれに近づきました。
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()
次のプロットを取得します。
青いポリゴンは、そのコーナー ノードによって認識されるサーフェスであり、カラーマップしたいものです。カラーマップされたサーフェスは、これまでのところ私の最高の結果です。しかし、私を悩ませている表面の上部近くに黒いポリゴンがあります。表面がメッシュグリッドに適合していないため、4番目のコーナーがナンになっている可能性があると思います。
これらの黒い三角形を回避するための回避策はありますか、またはそのコーナー ノードだけが認識しているサーフェスをカラーマッピングするより良い方法はありますか?
編集:これは、次のコマンドを使用して最初のコメントで指定された三角測量ソリューションの図です。
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()))