在matplotlib底图中设置数据限制

时间:2014-05-12 18:16:56

标签: python matplotlib gis matplotlib-basemap

我试图绕过matplotlib的{​​{1}} API。我想要做的是在圆柱投影上绘制非常小的区域(在任一方向上几公里)的纬度和经度数据。

问题是,我无法理解basemap构造函数的llcrnrlonllcrnrlaturcrnrlonurcrnrlat参数的工作原理。

据我了解,Basemap是最西经度,llcrnrlon是最南纬度,llcrnrlaturcrnrlon是东 - 最大和最北纬经度和纬度。

在所有这些情况下,给定一组坐标,(数值上)最小经度是最西边,最小纬度是最南边,反之亦然。这种理解是否正确?

我能够通过在底层urcrnrlat对象上设置xlim和ylim来使绘图正常工作,但是在底图构造函数中使用相同的值似乎会将我的数据从图中推出。

编辑:请参阅下面的代码以重现问题:

Axes

在下图中,右侧图像使用from matplotlib import pyplot from mpl_toolkits import basemap import random lat_bounds = 52.063443, 52.072587 long_bounds = 1.010408, 1.024502 ax1 = pyplot.subplot(121) ax2 = pyplot.subplot(122) ax1.set_title('With ll* rr*') ax2.set_title('With default values') my_map1 = basemap.Basemap(projection='cyl', llcrnrlat=lat_bounds[0], llcrnrlon=long_bounds[0], urcrnrlat=lat_bounds[1], urcrnrlon=long_bounds[1], ax=ax1) my_map2 = basemap.Basemap(projection='cyl', ax=ax2) data_lats = [random.uniform(*lat_bounds) for i in xrange(50)] data_lons = [random.uniform(*long_bounds) for i in xrange(50)] my_map1.plot(data_lats, data_lons) my_map2.plot(data_lats, data_lons) pyplot.show() 制作,左侧图像使用Basemap(projection='cyl')

制作

注意右侧图像中的点,使用matplotlib工具栏缩放时会成为第二个图像。

Notice the dot in the right hand side image Right hand side image zoomed

1 个答案:

答案 0 :(得分:2)

示例代码中的问题是您以错误的方式将参数传递给Basemap.plot()Basemap.plot的参数与matplotlib.pyplot.plot的参数完全相同,即:

plot(x,y,*args,**kwargs)

在圆柱坐标系中,经度是x坐标,纬度是y坐标,所以你应该mymap1.plot(data_lons, data_lats)。它似乎在你的第二个例子中起作用的原因是~~ 52的经度和~1的纬度是有意义的。这些点被绘制,但远离您的域。如果您将ax1的窗口平移得足够远,您就会看到它们(这与执行ax.set_xlim(lat_bounds)ax.set_ylim(lon_bounds)相同)。