摘要:在 Python 中绘制地图可以使用多种库,以下是几种常见的方法和工具,适用于不同场景的需求:
在 Python 中绘制地图可以使用多种库,以下是几种常见的方法和工具,适用于不同场景的需求:
1. 使用 Cartopy(推荐)
Cartopy 是一个强大的地理空间数据处理库,基于 Matplotlib,适合绘制静态地图(如国家边界、地形、气象图等)。
安装:
bash
pip install cartopy matplotlib
示例代码:
python
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
# 创建画布和地图投影
fig = plt.figure(figsize=(10, 6))
ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree)
# 添加地理特征
ax.add_feature(cfeature.LAND)
ax.add_feature(cfeature.OCEAN)
ax.add_feature(cfeature.COASTLINE)
ax.add_feature(cfeature.BORDERS, linestyle=':')
ax.add_feature(cfeature.LAKES, alpha=0.5)
ax.add_feature(cfeature.RIVERS)
# 设置地图范围
ax.set_extent([70, 140, 15, 55]) # 中国大致范围
# 添加标题和网格
plt.title("Basic Map with Cartopy")
ax.gridlines
plt.show
2. 使用 Folium(交互式地图)
Folium 基于 Leaflet.js,适合生成交互式网页地图(如标记点、热力图、GeoJSON 叠加等)。
安装:
bash
pip install folium
示例代码:
python
import folium
# 创建地图对象,设置初始位置和缩放级别
m = folium.Map(location=[39.9042, 116.4074], # 北京市中心
zoom_start=5,
tiles='OpenStreetMap') # 地图样式可选:Stamen Terrain, CartoDB dark_matter等
# 添加标记
folium.Marker(
location=[31.2304, 121.4737],
popup="上海",
icon=folium.Icon(color='green')
).add_to(m)
# 添加线段
folium.PolyLine(
locations=[[39.9042, 116.4074], [31.2304, 121.4737]],
color='blue',
weight=2
).add_to(m)
# 保存为 HTML 文件
m.save("China_map.html")
3. 使用 GeoPandas(地理数据处理 + 绘图)
GeoPandas 结合 Pandas 和地理数据处理功能,适合处理 Shapefile/GeoJSON 数据并绘制地图。
安装:
bash
pip install geopandas matplotlib
示例代码:
python
import geopandas as gpd
import matplotlib.pyplot as plt
# 加载世界地图数据(需自行下载或使用内置数据集)
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
# 绘制世界地图
fig, ax = plt.subplots(figsize=(15, 10))
world.plot(ax=ax, color='lightgrey', edgecolor='black')
# 高亮中国
china = world[world.name == 'China']
china.plot(ax=ax, color='red', edgecolor='black')
plt.title("World Map with GeoPandas (Highlighting China)")
plt.show
4. 使用 Plotly(交互式地图)
Plotly 支持交互式地图可视化,适合在 Jupyter Notebook 或网页中展示动态效果。
安装:
bash
pip install plotly
示例代码:
python
import plotly.express as px
# 使用内置数据集
df = px.data.gapminder.query("year == 2007")
# 创建气泡地图
fig = px.scatter_geo(df,
locations="iso_alpha",
color="continent",
hover_name="country",
size="pop",
projection="natural earth")
fig.update_layout(title="World Population (2007)")
fig.show
5. 使用 Basemap(传统方法,已不推荐)
Basemap 是 Matplotlib 的扩展库,但已停止维护,建议优先使用 Cartopy。
选择工具的建议
静态地图:Cartopy + Matplotlib 或 GeoPandas。交互式地图:Folium 或 Plotly。地理数据分析:GeoPandas + Cartopy。如果需要更复杂的功能(如卫星地图、实时数据),可以结合 API(如 Google Maps API、Mapbox)使用。
来源:老客数据一点号