基于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
相关产品推荐
相关产品推荐

