使用geoplot绘制KDE地理密度图时触发IndexError问题排查求助
调试KDE图绘制时的IndexError问题
问题背景
我尝试基于费城犯罪事件数据集和费城警区边界数据集创建KDE图,展示盗窃类犯罪的地理密度。数据处理代码如下:
import geopandas as gpd import geoplot as gplt from shapely.geometry import Point # 注:原代码未导入Point,可能是遗漏项 gdf = data.copy() gdf['Coordinates'] = list(zip(gdf.point_x, gdf.point_y)) gdf.Coordinates = gdf.Coordinates.apply(Point) gdf = gpd.GeoDataFrame( gdf, geometry='Coordinates', crs="epsg:4326" ) # 筛选盗窃类犯罪数据 crime_data = gdf.loc[gdf["text_general_code"] == 'Thefts'] # 处理区域边界数据 land = pd_boundary.unary_union land = gpd.GeoDataFrame(gpd.GeoSeries(land), columns=["geometry"]) land = land.set_geometry("geometry") land.crs = "epsg:4326"
执行以下绘图代码时,出现IndexError: index out of range错误:
ax = gplt.polyplot(land) gplt.kdeplot( crime_data, ax=ax )
调试思路
检查筛选后的犯罪数据是否为空:
执行print(crime_data.empty)或print(crime_data.shape)确认crime_data是否包含有效数据。若为空,排查筛选条件:- 用
print(gdf["text_general_code"].unique())查看所有犯罪类型,确认是否存在"Thefts"(可能存在拼写差异,比如实际值为"Theft")。
- 用
验证边界地理数据的有效性:
检查land的几何对象是否有效:print(land.is_valid) print(land.geometry)若
unary_union生成了空或无效几何,会导致polyplot的轴范围异常,进而引发kdeplot报错。确认坐标参考系(CRS)一致性:
验证crime_data和land的CRS是否完全匹配:print(crime_data.crs) print(land.crs)若不一致,用
to_crs统一:crime_data = crime_data.to_crs(land.crs)单独测试kdeplot功能:
先不结合polyplot,直接运行gplt.kdeplot(crime_data),若正常则排查polyplot生成的轴是否异常:ax = gplt.polyplot(land) print(ax.get_xlim()) print(ax.get_ylim())轴范围不合理(如全为NaN)会导致kdeplot无法计算密度。
检查库版本兼容性:
打印geoplot和geopandas版本,确认是否存在已知bug:print(gplt.__version__) print(gpd.__version__)尝试升级或降级库(如
pip install --upgrade geoplot geopandas)。过滤无效几何对象:
检查crime_data中的几何是否有无效或空值,过滤后再测试:crime_data = crime_data[crime_data.geometry.is_valid & ~crime_data.geometry.is_empty]
内容的提问来源于stack exchange,提问作者Hariraj
相关产品推荐
相关产品推荐

