把pcolormesh和轮廓放到同一个网格上?

时间:2012-12-21 20:46:34

标签: matplotlib

我正在尝试使用contourpcolormesh显示带有轴标签的2D数据。正如在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

另一种选择是使用imshow设置extent关键字 第一种方法不能很好地与2D轴一起使用(例如,由meshgridindices创建),第二种方法完全丢弃轴编号

1 个答案:

答案 0 :(得分: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()总是对我很好的选择。