You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 13:41:13