gpt4 book ai didi

python - 在 matplotlib basemap 中设置数据限制

转载 作者:太空宇宙 更新时间:2023-11-04 03:46:27 26 4
gpt4 key购买 nike

我正在努力研究 matplotlibbasemap API。我想做的是在圆柱投影上绘制一个非常小的区域(任一方向几公里)的纬度和经度数据。

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

据我了解,llcrnrlon 是最西经度,llcrnrlat 是最南纬度,urcrnrlonurcrnrlat分别是最东端和最北端的经度和纬度。

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

我可以通过在底层 Axes 对象上设置 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],urcrnrlat=lat_bounds[1],urcrnrlon=long_bounds[1],ax=ax1)

请注意右侧图像中的圆点,当使用 matplotlib 工具栏缩放时,它会变成第二张图像。

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

最佳答案

示例代码中的问题是您以错误的方式将参数传递给 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)).

关于python - 在 matplotlib basemap 中设置数据限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23616025/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com