上一篇
Python Basemap库地图绘制教程 - 从入门到精通
- Python
- 2025-08-08
- 267
Python Basemap库地图绘制完全指南
什么是Basemap?
Basemap是Matplotlib的一个扩展工具包,用于在Python中绘制2D地图。它能够:
- 绘制大陆、国家和行政区划边界
- 添加经纬度网格和标签
- 使用多种地图投影方式
- 在地图上叠加数据点和轨迹
- 创建专业级地理可视化效果
注意:Basemap目前处于维护模式,官方推荐使用Cartopy作为替代。但Basemap仍被广泛使用,且拥有丰富的示例和文档。
安装Basemap
使用Anaconda安装(推荐):
conda install -c conda-forge basemap
使用pip安装:
pip install basemap
安装依赖库:
pip install matplotlib numpy pillow
绘制基础世界地图
以下代码创建一个简单的世界地图:
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
# 创建地图实例
plt.figure(figsize=(12, 8))
m = Basemap(projection='mill', llcrnrlat=-60, urcrnrlat=80,
llcrnrlon=-180, urcrnrlon=180, resolution='c')
# 绘制海岸线、国家边界等
m.drawcoastlines(linewidth=0.5)
m.drawcountries(linewidth=0.5)
m.drawmapboundary(fill_color='#c6e0ff')
m.fillcontinents(color='#f0e6d2', lake_color='#c6e0ff')
# 添加经纬度网格
m.drawparallels(range(-60, 81, 30), labels=[1,0,0,0])
m.drawmeridians(range(-180, 181, 60), labels=[0,0,0,1])
# 添加标题
plt.title("Basemap基础世界地图", fontsize=16)
# 显示地图
plt.show()
代码解析:
- projection='mill': 使用米勒圆柱投影
- llcrnrlat/urcrnrlat: 设置纬度范围
- llcrnrlon/urcrnrlon: 设置经度范围
- resolution='c': 使用粗糙分辨率(其他选项:'l'低, 'i'中, 'h'高, 'f'全)
- drawcoastlines(): 绘制海岸线
- drawcountries(): 绘制国家边界
高级地图绘制技巧
1. 使用不同投影方式
Basemap支持30多种投影方式,常见的有:
- 'ortho': 正射投影(类似地球仪)
- 'robin': 罗宾森投影(平衡投影)
- 'merc': 墨卡托投影(常见于导航)
- 'lcc': 兰伯特圆锥投影(适合中纬度地区)
2. 在地图上添加数据
将数据点添加到地图上:
# 定义城市坐标(经度,纬度)
cities = {
'北京': (116.4, 39.9),
'上海': (121.47, 31.23),
'广州': (113.26, 23.12),
'成都': (104.06, 30.67)
}
# 创建中国地图
plt.figure(figsize=(10, 8))
m = Basemap(projection='lcc', lat_0=35, lon_0=105,
width=5e6, height=5e6, resolution='h')
m.drawcoastlines()
m.drawcountries(linewidth=1.5)
m.drawmapboundary(fill_color='#c6e0ff')
m.fillcontinents(color='#f0e6d2', lake_color='#c6e0ff')
# 添加城市标记
for city, (lon, lat) in cities.items():
x, y = m(lon, lat)
m.plot(x, y, 'ro', markersize=8)
plt.text(x, y, city, fontsize=12, color='#c0392b')
plt.title("中国主要城市分布图", fontsize=16)
plt.show()
3. 绘制轨迹和路径
连接点形成轨迹:
# 台风路径坐标
path = [
(125.0, 15.0), (123.0, 16.5), (121.0, 18.0),
(119.0, 20.0), (118.0, 22.5), (118.5, 25.0)
]
# 创建地图
plt.figure(figsize=(10, 8))
m = Basemap(projection='merc', llcrnrlat=10, urcrnrlat=30,
llcrnrlon=110, urcrnrlon=130, resolution='h')
m.drawcoastlines()
m.drawcountries()
m.drawmapboundary(fill_color='#c6e0ff')
m.fillcontinents(color='#f0e6d2', lake_color='#c6e0ff')
# 绘制路径
lons, lats = zip(*path)
x, y = m(lons, lats)
m.plot(x, y, 'b-', linewidth=2) # 路径线
m.plot(x, y, 'ro', markersize=6) # 路径点
# 添加起点和终点标签
plt.text(x[0], y[0], '起点', fontsize=10, color='#27ae60')
plt.text(x[-1], y[-1], '终点', fontsize=10, color='#c0392b')
plt.title("台风路径模拟图", fontsize=16)
plt.show()
常见问题与解决方法
1. 安装问题
问题: 安装时出现依赖错误
解决: 使用Anaconda安装或尝试:
pip install basemap --only-binary :all:
2. 地图显示空白
问题: 地图显示空白或只有轮廓
解决: 检查坐标范围设置,确保在合理范围内:
# 中国地图合理范围示例
llcrnrlon=70, urcrnrlon=140,
llcrnrlat=15, urcrnrlat=55
3. 标签重叠
问题: 经纬度标签重叠显示
解决: 调整网格间距和标签位置:
# 每30度绘制一条纬线,只在左侧显示标签
m.drawparallels(range(-90, 91, 30),
labels=[1,0,0,0])
总结
Basemap是一个强大的地理数据可视化工具,通过本教程你学会了:
- Basemap库的安装与环境配置
- 创建不同投影和范围的地图
- 自定义地图样式和颜色
- 在地图上添加标记点和轨迹
- 解决常见问题
虽然Basemap已被Cartopy取代,但它仍然是地理数据可视化的重要工具。掌握Basemap能为学习更先进的地理可视化库打下坚实基础。
本文由YongQi于2025-08-08发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://521pj.cn/20257585.html
发表评论