如何在Spyder中离线绘制地图坐标(无需浏览器)
在Spyder内直接绘制地图坐标的可行方案
完全可以无需浏览器或外部工具,直接在Spyder内完成坐标的地图绘制,以下是几个实用的Python包及实现方式:
1. Matplotlib + Cartopy
Cartopy是Matplotlib的地理扩展库,专注于静态地图绘制,能直接在Spyder的内置绘图窗口渲染结果。
安装命令
pip install cartopy matplotlib
示例代码
import matplotlib.pyplot as plt import cartopy.crs as ccrs import cartopy.feature as cfeature # 待绘制的坐标(纬度,经度)及对应名称 coords = [(39.9042, 116.4074), (40.7128, -74.0060), (35.6762, 139.6503)] city_names = ['北京', '纽约', '东京'] # 创建带地理投影的画布 fig, ax = plt.subplots(subplot_kw={'projection': ccrs.PlateCarree()}) # 添加基础地图元素:海岸线、陆地、海洋 ax.add_feature(cfeature.COASTLINE) ax.add_feature(cfeature.LAND, facecolor='lightgray') ax.add_feature(cfeature.OCEAN, facecolor='lightblue') # 绘制坐标点并标注名称 for (lat, lon), name in zip(coords, city_names): ax.plot(lon, lat, 'ro', markersize=8, transform=ccrs.PlateCarree()) ax.text(lon + 1, lat + 0.5, name, transform=ccrs.PlateCarree()) # 设置地图显示范围(覆盖全球主要区域) ax.set_extent([-180, 180, -60, 90]) # 在Spyder绘图窗口显示结果 plt.show()
2. Plotly
Plotly支持交互式地图,在Spyder的IPython控制台环境下,可直接在内置窗口展示交互式地图(无需导出HTML到浏览器)。
安装命令
pip install plotly
示例代码
import plotly.express as px import pandas as pd # 构造坐标数据 data = pd.DataFrame({ '城市': ['北京', '纽约', '东京'], '纬度': [39.9042, 40.7128, 35.6762], '经度': [116.4074, -74.0060, 139.6503] }) # 创建交互式散点地图 fig = px.scatter_geo( data, lat='纬度', lon='经度', text='城市', projection='natural earth' # 使用自然地球投影 ) # 在Spyder内直接显示交互式地图 fig.show()
注:确保Spyder的IPython控制台启用了Plotly支持,可通过
Tools > Preferences > IPython console > Graphics设置绘图后端为"Automatic"。
3. GeoPandas + Matplotlib
GeoPandas擅长处理地理空间数据,结合Matplotlib可快速绘制带基础底图的坐标分布图,适合需要处理复杂地理数据的场景。
安装命令
pip install geopandas matplotlib
示例代码
import geopandas as gpd import matplotlib.pyplot as plt from shapely.geometry import Point # 待绘制的坐标(经度,纬度)及城市名称 coords = [(116.4074, 39.9042), (-74.0060, 40.7128), (139.6503, 35.6762)] city_names = ['北京', '纽约', '东京'] # 创建地理数据框 geometry = [Point(lon, lat) for lon, lat in coords] gdf = gpd.GeoDataFrame( {'城市': city_names}, geometry=geometry, crs='EPSG:4326' # WGS84坐标系 ) # 加载世界地图底图数据 world_map = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres')) # 绘制地图 fig, ax = plt.subplots(figsize=(10, 6)) world_map.plot(ax=ax, color='lightgray', edgecolor='black') gdf.plot(ax=ax, marker='o', color='red', markersize=80) # 添加城市名称标注 for x, y, label in zip(gdf.geometry.x, gdf.geometry.y, gdf['城市']): ax.text(x + 1, y + 0.5, label, fontsize=10) ax.set_title('世界城市坐标分布') # 在Spyder窗口显示结果 plt.show()
内容的提问来源于stack exchange,提问作者Fish1996
相关产品推荐
相关产品推荐

