如何使用matplotlib basemap在地图上绘制指定经纬度的三个站点
解决方法
问题原因
- 你当前的代码仅完成了底图初始化和底图图层加载,没有添加站点点位的绘制逻辑,因此不会显示站点
- 当前设置的正交投影中心为
lat_0=50, lon_0=-100,仅覆盖北美为主的北半球西半球区域,A、B两个站点不在当前可见范围内,即使绘制也看不到
完整可运行代码
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.basemap import Basemap # 定义三个站点的信息:站点名、纬度、经度 stations = [ ("A", 17.8, 74.48), ("B", -25.02, 25.60), ("C", 44.58, -123.30) ] plt.figure(figsize=(10, 8)) # 这里用罗宾逊全局投影,方便同时看到三个站点,也可以换回ortho投影调整中心即可 m = Basemap(projection='robin', resolution='c', lat_0=0, lon_0=0) m.bluemarble(scale=0.5) # 遍历所有站点绘制标记和标注 for name, lat, lon in stations: # 将地理经纬度转换为当前投影的平面坐标,这一步不能省略 x, y = m(lon, lat) # 绘制站点标记:红色圆形,zorder参数保证点位在底图上层不被覆盖 m.scatter(x, y, marker='o', color='red', s=100, zorder=5) # 添加站点名称标注,偏移一定距离避免挡住标记 plt.text(x+150000, y+150000, name, fontsize=12, color='white', fontweight='bold') plt.title("三个站点位置分布") plt.show()
关键逻辑说明
- 坐标转换是必做步骤:不能直接用经纬度数值绘图,必须调用
m(lon, lat)转换为对应投影的平面坐标 - 图层优先级:
zorder设置大于1即可保证点位在底图上层显示 - 如果你要保留原来的正交投影,可将投影参数调整为
projection='ortho', resolution=None, lat_0=10, lon_0=0,调整后的中心可以让三个站点都落在可见半球内
内容的提问来源于stack exchange,提问作者manas
相关产品推荐
相关产品推荐

