我正在尝试使用contour
和pcolormesh
显示带有轴标签的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轴一起使用(例如,由meshgrid
或indices
创建),第二种方法完全丢弃轴编号
答案 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()总是对我很好的选择。