基于Geopandas[Python]创建含4个子图的地理数据可视化图形
单个Figure中创建4个子图展示地理数据的完整方案
没问题,我来帮你搞定这个需求!结合你给出的代码片段,我们可以用Matplotlib的子图布局配合GeoPandas的绘图能力,轻松实现4个子图展示不同GeoJSON数据的效果。
完整可运行代码
import numpy as np import pandas as pd import geopandas as gpd import matplotlib.pyplot as plt from shapely.geometry import Polygon from geojson import Point # 加载所有地理数据(补全你没写完的akc读取逻辑) ags = gpd.read_file('150824-altglascontainer-mannheim.geojson') hts = gpd.read_file('standorte_hts_gesamt.geojson') wlan = gpd.read_file('standorte-wlan-mit-geocode.geojson') akc = gpd.read_file('你的akc数据文件路径.geojson') # 替换成你的实际文件路径 # 创建1行4列的子图布局,设置合适的画布尺寸避免拥挤 fig, axes = plt.subplots(nrows=1, ncols=4, figsize=(20, 5)) # 逐个在子图上绘制数据,并添加标题和美化 # 第一个子图:Altglascontainer ags.plot(ax=axes[0], color='forestgreen', edgecolor='black') axes[0].set_title('Altglascontainer (Mannheim)', fontsize=10) axes[0].axis('off') # 关闭坐标轴让地图更清爽 # 第二个子图:HTS站点 hts.plot(ax=axes[1], color='steelblue', edgecolor='black') axes[1].set_title('HTS Standorte', fontsize=10) axes[1].axis('off') # 第三个子图:WLAN站点 wlan.plot(ax=axes[2], color='darkorange', edgecolor='black') axes[2].set_title('WLAN Standorte', fontsize=10) axes[2].axis('off') # 第四个子图:AKC数据 akc.plot(ax=axes[3], color='crimson', edgecolor='black') axes[3].set_title('AKC Standorte', fontsize=10) axes[3].axis('off') # 自动调整子图间距,防止标题和内容重叠 plt.tight_layout() # 显示图形,或者保存为图片 plt.show() # plt.savefig('geo_subplots.png', dpi=300, bbox_inches='tight') # 可选:保存高清图
关键细节解释
- 子图初始化:
plt.subplots(nrows=1, ncols=4)会生成一个Figure对象和一个包含4个Axes的数组,通过axes[0]到axes[3]就能精准控制每个子图。如果想要2行2列的布局,只需要改成nrows=2, ncols=2, figsize=(12,10)即可。 - GeoPandas绘图:GeoDataFrame的
plot()方法支持指定ax参数,把数据绘制到指定子图上,这是实现多子图展示的核心逻辑。 - 美化技巧:
axis('off')关闭坐标轴,避免地理数据被坐标轴元素干扰,让地图展示更直观。tight_layout()自动调整子图间的间距和边距,解决标题、内容重叠的问题。
- 点数据适配:如果你的某些数据是点类型(比如WLAN站点),可以修改
plot()的样式参数让展示更清晰:wlan.plot(ax=axes[2], marker='o', color='darkorange', markersize=4, alpha=0.6)
这样就能得到一个布局整齐、展示清晰的多子图地理数据可视化结果啦!
内容的提问来源于stack exchange,提问作者CWhite
相关产品推荐
相关产品推荐

