2012-09-07 52 views
3

我想绘制数据集与相关的经度和纬度。我使用的数据的详情如下:使用pcolormesh绘制轨道数据

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() 

这给了如下图所示: Temp Brightness plot

但如果我对数据集执行类似的情节(大小2691x960,同去LON和LAT)覆盖整个londitude拉伸(-180〜180),我得到一个“怪吧”: strange bar

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

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

+0

只是一个简单的问题。我假设你正在使用TRMM数据。您提供给pcolormesh的数据集是否延伸到-180/180边界? – Vorticity

+1

我正在使用MADRAS数据,有效载荷在MEGHATROPICS(印度) 是的,我正在喂食pcolormesh,延伸到-180/180边界。 –

回答

1

我认为你遇到了一个我刚才遇到的问题。这里的问题是,当底图试图创建多边形时,它使用了一种插值方法,该方法似乎不能正确处理主要子午线。实际上穿过素数子午线的像素会插入到延伸到全球的多边形中。

我用过的解决方案是将文件分割成两个蒙版阵列(或者在不同时间用两种不同的方法掩盖原始数组),其中一个东半球蒙蔽,另一个蒙上西半球,然后将它们映射到同一个轴对象。

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

+0

我认为问题不在于底图而是pcolormesh,因为我已经执行了没有底图的图(这里是m) 'plt.pcolormesh(x,y,data)' 它给出了相同的结果。 我会尝试屏蔽冲突的数据区域。如果有效,我会通知。 感谢您的建议 –

+0

是的,你是完全正确的。这个问题不在底图中,而是在plt.pcolormesh中。我错了。 – Vorticity

+0

pcolormesh不会创建“多边形” - 它是一个不规则形状的*连续*数据块。不幸的是,因为你正在穿越日期线,你正在打破连续的状况。我知道这个问题的最佳解决方案是使用cartopy的pcolormesh(我将在接下来的几天内发布一个答案)。请注意:cartopy尚未公布,仍在进行中。 – pelson

0

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

从文档:

arrout, lonsout = addcyclic(arrin, lonsin)增加了环状(环绕)指向经度到arrinlonsin,假定经度是arrin最右边的尺寸。

+0

这个问题可能听起来很相似,但并不相同。 'addcyclic'不能处理问题中提出的维度,因为它预期经度为1维数组。 – gerrit