大家好,我是安夏学姐!今天要给大家介绍一个超级实用的 Python 库 - Basemap。它是 Matplotlib 的扩展工具包,专门用来绘制地图。不管是想做数据可视化,还是地理信息分析,Basemap 都能帮你轻松搞定。让我们一起来探索这个强大的地图绘制工具吧!
## 安装 Basemap
我们需要安装 Basemap。最简单的方式是使用 conda:
```python
conda install basemap
如果你使用 pip,也可以这样安装:
小贴士:建议使用 conda 安装,因为它会自动处理依赖关系,避免安装过程中的各种报错。
让我们从最基础的开始 - 绘制一个简单的世界地图:
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
# 创建画布
plt.figure(figsize=(15, 10))
# 创建地图对象
m = Basemap(projection='mill',
llcrnrlat=-90, # 纬度范围
llcrnrlon=-180, # 经度范围
urcrnrlat=90,
urcrnrlon=180,
resolution='l') # 分辨率
# 绘制基本要素
m.drawcoastlines() # 海岸线
m.drawcountries() # 国界
m.fillcontinents(color='coral', lake_color='aqua')
m.drawmapboundary(fill_color='aqua')
plt.title('世界地图')
plt.show()
地图绘制好了,接下来我们来添加一些标记点,比如标注几个主要城市:
# 继续使用上面的地图对象 m
cities = {
'北京': (116.4, 39.9),
'东京': (139.7, 35.7),
'纽约': (-74.0, 40.7)
}
for city, coords in cities.items():
x, y = m(coords[0], coords[1])
m.plot(x, y, 'ro', markersize=10) # 红色圆点标记
plt.text(x, y, city, fontsize=12)
plt.show()
小贴士:使用 m(lon, lat)
可以将经纬度坐标转换为地图投影坐标。
Basemap 支持多种地图投影方式,这里我们尝试使用兰伯特投影来绘制中国地图:
plt.figure(figsize=(15, 10))
m = Basemap(projection='lcc', # Lambert Conformal projection
llcrnrlat=15, # 设置中国地图范围
llcrnrlon=70,
urcrnrlat=55,
urcrnrlon=140,
lat_0=35, # 中心纬度
lon_0=105, # 中心经度
resolution='l')
m.drawcoastlines()
m.drawcountries()
m.drawprovinces() # 绘制省界
m.fillcontinents(color='lightgray')
plt.title('中国地图(兰伯特投影)')
plt.show()
注意事项:
- 不同的投影方式适合不同的地理区域,选择合适的投影可以减少地图变形
- resolution 参数可选值有 ‘c’(粗糙)、’l’(低)、’i’(中)、’h’(高)、’f’(最高)
Basemap 最强大的地方在于,它可以结合 Matplotlib 的各种功能,在地图上叠加数据可视化图层:
import numpy as np
# 生成一些随机数据点
lons = np.random.uniform(70, 140, 50)
lats = np.random.uniform(15, 55, 50)
data = np.random.uniform(0, 100, 50)
# 转换坐标
x, y = m(lons, lats)
# 绘制散点图
scatter = m.scatter(x, y, c=data,
cmap='YlOrRd',
s=100,
alpha=0.5)
plt.colorbar(scatter, label='数值')
plt.show()
小贴士:结合 Pandas 处理实际数据时,记得先清理数据,确保经纬度值在合理范围内。
- Basemap 是基于 Matplotlib 的地图绘制工具
- 可以结合 Matplotlib 实现丰富的数据可视化效果
小伙伴们,今天的 Python 学习之旅就到这里啦!记得动手敲代码,有问题随时在评论区问安夏学姐我哦。祝大家学习愉快,Python 学习节节高!
Would you like me to explain or break down this code?
·end·
—如果喜欢,快分享给你的朋友们吧—
我们一起愉快的玩耍吧