4

我正在尝试使用contour和显示带有轴标签的二维数据pcolormesh。正如 matplotlib 用户列表中所述,这些函数遵循不同pcolormesh的约定:期望 x 和 y 值指定单个像素的,而contour期望像素的中心

使这些行为一致的最佳方法是什么?

我考虑过的一种选择是制作“中心到边缘”功能,假设数据间隔均匀:

def centers_to_edges(arr):
    dx = arr[1]-arr[0]
    newarr = np.linspace(arr.min()-dx/2,arr.max()+dx/2,arr.size+1)
    return newarr

另一种选择是imshowextent关键字集一起使用。
第一种方法不能很好地使用 2D 轴(例如,由meshgridor创建indices),第二种方法完全丢弃了轴号

4

1 回答 1

0

您的数据是常规网格吗?如果没有,您可以使用 griddata() 来获取它。我认为,如果您的数据太大,则始终可以进行子采样或正则化。如果数据太大,也许你的输出图像与它相比总是很小,你可以利用它。如果将 imshow() 与“extent”和“interpolation='nearest'”一起使用,您将看到数据以单元格为中心,并且范围提供了单元格的下边缘(角)。另一方面,轮廓假设数据以单元格为中心,并且 X,Y 必须是单元格的中心。因此,您需要关心轮廓的输入域。一个简单的例子是:

x = np.arange(-10,10,1)
X,Y = np.meshgrid(x,x)
P = X**2+Y**2
imshow(P,extent=[-10,10,-10,10],interpolation='nearest',origin='lower')
contour(X+0.5,Y+0.5,P,20,colors='k')

我的测试告诉我 pcolormesh() 是一个非常缓慢的例程,我总是尽量避免它。griddata 和 imshow() 对我来说总是一个不错的选择。

于 2013-04-24T23:16:43.893 回答