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

基于Python Basemap在全球地图绘制坐标点及显示轴值问题求助

问题原因分析

  • 坐标点显示不全:你使用的ortho(正射投影)仅能展示朝向观测者的半个地球,你当前设置的投影中心为lat_0=0, lon_0=0,西经123.305的STC站点位于背阴半球,自然不会被渲染出来。
  • 轴值未显示:drawparallels和drawmeridians方法默认不输出经纬度标签,需要额外配置labels参数开启;同时你代码中先后调用了bluemarble和shadedrelief两个底图接口,多层底图叠加也会遮挡网格和标签。

修复方案

方案1:保留正射投影,调整投影中心

调整投影中心经度为-25,让三个站点都落在可见半球,同时开启标签显示、去掉重复底图即可:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
from itertools import chain

def draw_map(m, scale=0.2):
    # 仅保留一层底图
    m.bluemarble(scale=scale)
    
    # 开启经纬度标签,labels参数依次对应 [左侧,右侧,上侧,下侧] 是否显示
    lats = m.drawparallels(np.linspace(-90, 90, 13), labels=[1,0,0,0], color='w', alpha=0.3)
    lons = m.drawmeridians(np.linspace(-180, 180, 13), labels=[0,0,0,1], color='w', alpha=0.3)

    lat_lines = chain(*(tup[1][0] for tup in lats.items()))
    lon_lines = chain(*(tup[1][0] for tup in lons.items()))
    all_lines = chain(lat_lines, lon_lines)
    
    for line in all_lines:
        line.set(linestyle='-', alpha=0.3, color='w')
        
plt.figure(figsize=(8, 8))
# 调整投影中心经度为-25,保证三个站点都在可见半球
m = Basemap(projection='ortho', resolution=None, lat_0=0, lon_0=-25)
draw_map(m)

##########坐标绘制#############
points = [
    (17.38, 74.48, 'STA'),
    (-25.02, 25.60, 'STB'),
    (44.586, -123.305, 'STC')
]
for lat, lon, name in points:
    x, y = m(lon, lat)
    # 过滤半球外的无效点
    if not np.isinf(x) and not np.isinf(y):
        plt.plot(x, y, 'ok', markersize=5)
        plt.text(x, y, f' {name}', fontsize=12)

plt.show()

方案2:更换为全球投影

如果需要完整展示全球范围,可以把投影换成robin(罗宾逊投影),天然支持全区域显示,仅需要替换Basemap初始化代码即可:

m = Basemap(projection='robin', resolution=None, lat_0=0, 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.25 13:15:04