使用python底图和pcolormesh的奇怪行为

时间:2016-10-12 21:37:26

标签: python numpy matplotlib matplotlib-basemap

我尝试通过制作numpy.meshgrid来绘制纵向条带的binned数据,使用Basemap()将坐标转换为map x,y坐标,然后制作应用于地图的pcolormesh。代码适用于Python 2.7:

import numpy as np
from mpl_toolkits.basemap import Basemap, shiftgrid, addcyclic
import matplotlib.pyplot as plt

lon_tics =  np.linspace(0, 360.0, 60)
lat_tics = np.linspace(-90.0, 90.0, 30)
map_bins = np.zeros((60,30), dtype = np.int)
bin15 = np.random.randint(0,20,30) #we should see 2 strips
bin45 = np.random.randint(0,20,30) #but we get lots of strange results
map_bins[15] = bin15
map_bins[45] = bin45
m = Basemap(projection='moll',lon_0= -120,resolution='c') #NOTE changing lon_0 has weird results!
lon_bins_2d, lat_bins_2d = np.meshgrid(lon_tics, lat_tics)
xs, ys = m(lon_bins_2d, lat_bins_2d)
plt.pcolormesh(xs, ys, np.transpose(map_bins))
plt.colorbar()
m.drawparallels(np.arange(-90.,120.,30.), labels = [True])
m.drawmeridians(np.arange(0.,360.,60.), labels = [False])
plt.show()

这给了一些非常奇怪的行为。通过更改数据所在的区域,通过Basemap()实例化设置lon_0,或者如何定义lat / lon区间,我们将获得不同的行为,例如:

  • 没有纵向条带
  • 1条纵条
  • 2条纵向条带(预期行为)(如图所示:用lon_0 = -120制作)
  • '抹黑' bin到map的边缘(如图所示:用lon_0 = 98制作)

我一直试图解决这个问题;谁能看到我做错了什么?

感谢阅读。

Correct output

Smear

1 个答案:

答案 0 :(得分:0)

经过一些额外的回顾,我偶然发现了这篇文章:Map projection and forced interpolation

这解决了我现在遇到的问题,所以如果其他人遇到这个问题,我会联系。