You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 04:24:00