使用python Basemap.pcolormesh与非单调经度跳跃

时间:2016-10-12 22:53:36

标签: python matplotlib-basemap

我有卫星扫描数据,我试图使用pcolormesh在底图上绘图。

数据被组织为2d矩阵(bTemp),具有两个相应的2D数组lat和lon,它们在每个点给出相应的纬度和经度。所以我的绘图代码看起来像

m = Basemap()
m.drawcoastlines()
m.pcolormesh(lon, lat, bTemp)

但是,这并没有给我正在寻找的结果。地图上有一条大条纹。 enter image description here

我认为造成这种情况的原因是我的经度沿着给定的光线在环绕点处非单调增加。

以下是我的经度数组中的射线图

plot(lon[100,:])

enter image description here

解决这个问题的最佳方法是什么,以便pcolormesh图只是跳到地图的另一边而不用填充区域连接两个点?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用numpy.unwrap来解包数据。它的设计正是为了这个:打开角度跳跃(以弧度表示),这是由于我们使用单值函数的方式而产生的伪影。

你需要在度和弧度之间来回转换你的经度才能发挥作用,但要点是:

import numpy as np
lon_unwrapped = np.rad2deg(np.unwrap(np.deg2rad(lon)))

这将在您的数据中找到大于180度的跳跃,并采用它们的360度补码。例如:

np.rad2deg(np.unwrap(np.deg2rad([150,-150])))
# array([ 150.,  210.])

此外,unwrap接受ndarray数据,您可以告诉它哪些轴执行解开。默认情况下,这是最后一个维度,对于您的情况似乎没问题,您要打开lon[i,:]