3

我正在尝试映射具有相关纬度和经度的数据集。我正在使用的数据的详细信息如下:

Variable   Type       Data/Info
-------------------------------
lat    ndarray    1826x960, type `float64`
lon    ndarray    1826x960, type `float64`
data   ndarray    1826x960, type `float64`

然后我创建了一个底图:

m = Basemap(projection='cyl', llcrnrlon=-180, urcrnrlon=180, llcrnrlat=-40, urcrnrlat=40, resolution='c')

现在,在创建的底图上,我将使用 pcolormesh 绘制上述数据集:

m.drawcoastlines()
m.drawcountries
x,y = m(lon,lat)
m.pcolormesh(x,y,data)
m.colorbar()
plt.show()

这给出了下图: 温度亮度图

但是,如果我在覆盖整个经度范围(-180 到 180)的数据集(大小 2691x960,同样适用于 lon 和 lat)上执行类似的绘图,我会得到一个“奇怪的条”: 奇怪的条

我很确定由于数据集的重叠而出现了奇怪的条。同样的情节已经在 matlab 中进行过,它工作得很好。

请告诉我问题是什么,可以做些什么来删除栏,在 python 中绘制这种数据的其他方法是什么。

4

2 回答 2

1

我认为您遇到了我之前遇到的问题。这里的问题是,当底图尝试创建多边形时,它使用的插值方法似乎无法正确处理本初子午线。实际穿过本初子午线的像素被插入到一个在全球范围内延伸的多边形中。

我使用的解决方案是将文件拆分为两个掩码数组(或者只是在不同时间以两种不同方式掩码原始数组),一个掩码东半球,一个掩码西半球,然后将它们都映射到相同的坐标区对象。

编辑:另一个解决方案可能是让你的经度范围从 -179.99 到 179.99 或类似的东西。

于 2012-09-17T19:18:11.607 回答
0

我没有用任何东西给我这个问题,但它看起来像使用mpl_toolkit.basemap.addcyclic方法在这里提供了一个类似的探测问题的解决方案。

从文档:

arrout, lonsout = addcyclic(arrin, lonsin)将经度中的循环(环绕)点添加到arrinlonsin,假设经度是 的最右侧维度arrin

于 2014-03-27T21:20:44.910 回答