R语言geofacet包自定义网格正整数值报错问题排查
解决geofacet包grid_preview报错及分面间距过大问题
报错原因分析
调用grid_preview(poly_grid)时出现如下错误:
Error: A custom grid must have positive integer-valued 'col' values
问题出在你的poly_grid数据中存在值为0的col和row,geofacet要求自定义网格的col和row必须是大于0的正整数。查看数据可发现:
col列第7个元素值为0row列第29个元素值为0
修复报错的操作
把所有0值替换为正整数(比如1,需保证整体坐标逻辑合理),代码示例:
# 复制原数据避免修改原始对象 poly_grid_fixed <- poly_grid # 替换col中的0为1 poly_grid_fixed$col[poly_grid_fixed$col == 0] <- 1 # 替换row中的0为1 poly_grid_fixed$row[poly_grid_fixed$row == 0] <- 1 # 重新预览网格 grid_preview(poly_grid_fixed)
解决分面间距过大的方案
使用真实地理坐标时无报错但间距过大,是因为原始坐标数值范围太大。可以将坐标归一化映射到紧凑的正整数网格,示例代码:
# 基于真实坐标生成紧凑网格 poly_grid_compact <- poly_grid_coord # 将col缩放到1-30的正整数区间,可根据需求调整区间范围 poly_grid_compact$col <- as.integer(scale(poly_grid_compact$col, center = min(poly_grid_compact$col), scale = max(poly_grid_compact$col)/29) + 1) # 将row缩放到1-30的正整数区间 poly_grid_compact$row <- as.integer(scale(poly_grid_compact$row, center = min(poly_grid_compact$row), scale = max(poly_grid_compact$row)/29) + 1) # 预览紧凑后的网格 grid_preview(poly_grid_compact)
注:代码中29对应1-30的区间范围(30-1=29),若想调整为1-25的区间,只需将29替换为24即可。
内容的提问来源于stack exchange,提问作者C. Guff
相关产品推荐
相关产品推荐

