如何为Matplotlib Basemap地图添加缩放变量调整比例尺?
调整Matplotlib Basemap地图缩放级别的解决方案
你用mpl.rcParams['figure.figsize']只能改变图片的画布尺寸,没法调整地图本身的缩放级别——因为Basemap的显示范围是由初始化时的边界经纬度参数决定的,和画布尺寸无关。下面是具体的解决方法:
核心思路
Basemap的缩放由llcrnrlon(左下角经度)、llcrnrlat(左下角纬度)、urcrnrlon(右上角经度)、urcrnrlat(右上角纬度)这四个参数直接控制。缩小这四个参数围成的范围,地图就会放大;扩大范围,地图就会缩小。
快速实现:用缩放因子调整范围
定义一个zoom_factor变量,替换原来代码中固定的±1,通过修改这个变量的值来控制缩放:
import matplotlib.pyplot as plt from mpl_toolkits.basemap import Basemap latitudes = [24.49522] longitudes = [46.5057713] # 定义缩放因子:数值越小,地图放大程度越高(显示范围越小) zoom_factor = 0.3 # 可根据需求调整,比如0.1是极度放大,2是缩小显示更大范围 # 创建Basemap实例,用缩放因子控制边界范围 m = Basemap(projection='merc', lat_0=0, lon_0=0, resolution='h', area_thresh=1000.0, llcrnrlon=min(longitudes)-zoom_factor, llcrnrlat=min(latitudes)-zoom_factor, urcrnrlon=max(longitudes)+zoom_factor, urcrnrlat=max(latitudes)+zoom_factor, epsg=4326) # 设置卫星视图 m.arcgisimage(epsg=4326, xpixels=1000, verbose=False) # 绘制坐标点 x, y = m(longitudes, latitudes) m.plot(x, y, 'ro', markersize=20) # 保存图片 plt.savefig('map.jpg', dpi=300) plt.close()
精确控制:按公里范围调整缩放
如果需要精确显示目标点周围N公里的范围,可以通过经纬度与公里数的换算来设置边界:
import matplotlib.pyplot as plt from mpl_toolkits.basemap import Basemap import math latitudes = [24.49522] longitudes = [46.5057713] # 目标显示范围:目标点周围10公里 target_radius_km = 10 # 计算经纬度每度对应的公里数 km_per_deg_lat = 110.574 # 纬度方向每度约110.574公里,全球基本一致 km_per_deg_lon = 111.32 * math.cos(math.radians(latitudes[0])) # 经度每度的公里数随纬度变化 # 计算需要的经纬度差值 lon_diff = target_radius_km / km_per_deg_lon lat_diff = target_radius_km / km_per_deg_lat # 创建Basemap实例,用计算出的差值设置边界 m = Basemap(projection='merc', lat_0=0, lon_0=0, resolution='h', area_thresh=1000.0, llcrnrlon=longitudes[0]-lon_diff, llcrnrlat=latitudes[0]-lat_diff, urcrnrlon=longitudes[0]+lon_diff, urcrnrlat=latitudes[0]+lat_diff, epsg=4326) m.arcgisimage(epsg=4326, xpixels=1000, verbose=False) x, y = m(longitudes, latitudes) m.plot(x, y, 'ro', markersize=20) plt.savefig('map_precise.jpg', dpi=300) plt.close()
内容的提问来源于stack exchange,提问作者Maverick
相关产品推荐
相关产品推荐

