<p>我也在寻找解决这个问题的办法,这次讨论帮助我取得了成功。它的工作原理如下:</p>
<ol>
<li><p>一个非常类似的问题的解决方案已经在GBy的注释中作为链接给出了(见上面的:<a href="https://stackoverflow.com/questions/24218543/colouring-the-surface-of-a-sphere-with-a-set-of-scalar-values-in-matplotlib/24229480#comment37425657_24229480" title="Colouring the surface of a sphere with a set of scalar values in matplotlib">Colouring the surface of a sphere with a set of scalar values in matplotlib</a>)</p></li>
<li><p>将知识转移到这里的问题上,会导致创建一个包含振幅的附加数组,并将其分配给“通过<code>set_array</code>方法实现的底层ScalarMappable”。相应的python代码如下所示:</p>
<pre><code>from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib import pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.gca(projection='3d')
colors = np.mean(CorticalImage[Face], axis=1)
collec = ax.plot_trisurf(Xcoordinates, Ycoordinates, Zcoordinates, triangles=Face, cmap=cm.jet, linewidth=0.2)
collec.set_array(colors)
collec.autoscale()
ax.view_init(30, 0)
cbar = fig.colorbar(collec)
</code></pre></li>
</ol>
<p>数组<code>Xcoordinates</code>、<code>Ycoordinates</code>、<code>Zcoordinates</code>包含网格节点的X、Y和Z坐标。当用<code>Xcoordinates.shape</code>检查它们的形状时,应该像这样<code>(750,)</code>,其中750是网格节点的数量。矩阵<code>Face</code>与Larry提出的原始问题中的矩阵UVW相同。它是“一个2dm-x-3矩阵,其中每一行是点云的三个索引集”。如果您检查矩阵的形状<code>Face</code>,它应该类似于<code>(1496, 3)</code>,其中1496是网格中的三角形数,3是一个三角形中的节点数。最后,数组<code>CorticalImage</code>包含网格中每个节点的振幅,这些是我们要用于网格颜色(而不是Z值)的值。数组的形状应该与坐标数组的形状类似,即<code>(750,)</code>。</p>
<p>重要!!!可以看到节点数和三角形数不相等。几乎总是这样。此外,振幅通常是为节点而不是为三角形给定的。因此,应计算三角形的振幅,以便在绘图中获得正确的颜色。这是在<code>colors = np.mean(CorticalImage[Face], axis=1)</code>行中完成的。</p>