如何将 Matplotlib 的 pcolormesh 与非均匀网格一起使用?



我有一个长度为N的数组X,包含XY 2D平面上的所有X位置,一个长度为N的数组Y包含XY 2D平面上的所有Y位置,以及一个长度为N的数组Z,我想要绘制它。这个变量Z在每个N个网格点上求值,这些网格点在XY平面上是非均匀间隔的。

我通过创建一个统一的网格,并使用scipy.interpolate.griddata和imshow在其中插值Z,获得了一个不错的结果。然而,我不应该这样做,因为Z是在确切的XY坐标上定义的。此外,我可以简单地用gnuplot使用X:Y:Z绘制它,虽然不是理想的,因为它本身会创建一个网格。

是否有一种方法可以重新创建网格,这样我就可以用pcolormesh绘制Z ?

谢谢。

请注意,在实际空间中,网格可以是非均匀和非矩形的。

如果坐标形成一个网格,那么总可以使用pcolormesh,它不要求X和Y都是等距的,甚至不要求X和Y都是单调递增或递减的。如果X和Y不是单调的,则pcolormesh的输入坐标被解释为单元格中心,而不是单元格角。如果您希望单元格平滑地着色,请使用shading='gouraud'

对于任意分散的数据,使用pcolormesh的可靠方法是手动将分散的数据插值到均匀网格中。例如:

from scipy.interpolate import griddata
xi = np.linspace(1,  2, 100)
yi = np.linspace(-0.5, 0.5, 100)
zi = griddata((x.flatten(), y.flatten()), z.flatten(), (xi[None,:], yi[:,None]), method='cubic')
fig, ax = plt.subplots()
c = ax.pcolormesh(xi, yi, zi,shading='auto')

最新更新