Python 在matplotlib basemap中设置数据限制

Python 在matplotlib basemap中设置数据限制,python,matplotlib,gis,matplotlib-basemap,Python,Matplotlib,Gis,Matplotlib Basemap,我正试图对matplotlib的basemapAPI了如指掌。我想做的是在柱面投影上绘制一个非常小的区域(两个方向都有几公里)的经纬度数据 问题是,我无法理解llcrnrlon、llcrnrlat、urcrnlon和urcrnlat构造函数的参数是如何工作的 据我所知,llcrnrlon是最西边的经度,llcrnrlat是最南边的纬度,urcrnlon和urcrnlat分别是最东边和最北边的经度和纬度 在所有这些情况下,给定一组坐标,(数值上)最小经度为最西面,最小纬度为最南面,反之亦然。这种理

我正试图对
matplotlib
basemap
API了如指掌。我想做的是在柱面投影上绘制一个非常小的区域(两个方向都有几公里)的经纬度数据

问题是,我无法理解
llcrnrlon
llcrnrlat
urcrnlon
urcrnlat
构造函数的参数是如何工作的

据我所知,
llcrnrlon
是最西边的经度,
llcrnrlat
是最南边的纬度,
urcrnlon
urcrnlat
分别是最东边和最北边的经度和纬度

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

通过在底层
轴上设置xlim和ylim
对象,我可以使绘图正常工作,但在basemap构造函数中使用相同的值似乎会将我的数据从绘图中删除

编辑:有关问题的再现,请参阅下面的代码:

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')
生成右侧图像,使用
Basemap(projection='cyl',llcrnrlat=lat_bounds[0],llcrnrlon=long_bounds[0],urcrnlat=lat_bounds[1],urcrnlon=long_bounds[1],ax=ax1)生成左侧图像。

请注意右侧图像中的点,当使用matplotlib工具栏进行缩放时,该点将成为第二个图像


示例代码中的问题是,将参数传递给
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\u xlim(lat\u bounds)
ax.set\u ylim(lon\u bounds)
的操作相同)。

关于参数,您是正确的
llcrnrlon
表示“左下角经度”,以此类推。另外,
“cyl”
(圆柱形)是
投影
关键字的默认值,因此您的思路是正确的。你确实需要注意一些事情,比如密谋反间谍(180 E)。您可以发布您试图绘制的值吗?另外,手动设置
ax1.set\u xlim(*lat\u bounds)
ax1.ylim(*long\u bounds)
也可以做到这一点。@ThomChubb:请查看编辑的帖子。这是一个很棒的地方!我永远也找不到它!是的,按照GIS和地图学的惯例,顺序是(纬度,经度)。。。这以前让我头疼过。