Python中如何叠加绘制多色不同范围的缓冲区?
解决多颜色缓冲区叠加绘制问题
你的代码核心问题在于:Python中直接执行gdf30=gdf属于引用传递,并非创建新的GeoDataFrame副本。修改gdf30['geometry']时,原gdf的几何数据也会被同步修改,导致后续gdf20的缓冲区是基于30km缓冲区再次计算的,完全偏离了基于原始坐标点生成不同范围缓冲区的需求。
修正后的代码
import geopandas as gpd import matplotlib.pyplot as plt # 基于原始坐标点创建GeoDataFrame gdf = gpd.GeoDataFrame(df, geometry=gpd.points_from_xy(df.x, df.y), crs="EPSG:25832") # 关键:用copy()生成独立副本,确保每个缓冲区基于原始点计算 gdf50 = gdf.copy() gdf50['geometry'] = gdf50.geometry.buffer(50*1000) gdf30 = gdf.copy() gdf30['geometry'] = gdf30.geometry.buffer(30*1000) gdf20 = gdf.copy() gdf20['geometry'] = gdf20.geometry.buffer(20*1000) # 加载底图并转换坐标系 Map = gpd.read_file("Map_DK_SWE.gpkg") Map = Map.to_crs(25832) # 绘图 fig, ax = plt.subplots() Map.plot(ax=ax, color='white', edgecolor='black') ax.set_ylim([6000000, 6500000]) ax.set_xlim([400000, 850000]) # 叠加绘制缓冲区:通过透明度和层级确保多层可见 gdf50.plot(ax=ax, color='darkblue', alpha=0.3, zorder=1) gdf30.plot(ax=ax, color='blue', alpha=0.4, zorder=2) gdf20.plot(ax=ax, color='green', alpha=0.5, zorder=3) plt.show()
核心优化点
- 用
copy()方法生成独立的GeoDataFrame,保证每个缓冲区都基于原始坐标点计算。 - 设置
alpha透明度参数,避免外层缓冲区完全遮挡内层,让多层范围同时可见。 - 通过
zorder控制图层层级,内层缓冲区(20km)层级更高,会显示在最上层;也可以按从大到小的顺序绘制,小范围自动覆盖在大范围之上。
内容的提问来源于stack exchange,提问作者Gert94
相关产品推荐
相关产品推荐

