在R中映射CSV格式波士顿犯罪数据绘图仅显示两个点如何解决
问题排查&修复方案
- 第一步:优先检查坐标顺序是否写错
st_as_sf的coords参数要求输入顺序为先经度、后纬度,你当前代码中写的c("Lat", "Long")是先纬度后经度,会导致坐标完全错位,绝大多数点落在地图可视范围外,看起来就只剩2个点。先调整参数顺序尝试:
points = st_as_sf(crimedata, coords = c("Long", "Lat"), crs = 4326) plot(points$geometry, pch=16, col="navy")
- 第二步:排查经纬度的无效值
如果调整顺序后问题仍存在,检查经纬度的空值、异常值:波士顿的经纬度范围大致为北纬42.22°-42.4°,西经70.8°-71.2°(西经对应数值为负),先统计数据分布:
# 查看经纬度列的统计信息和数据类型 str(crimedata[,c("Lat","Long")]) summary(crimedata[,c("Lat","Long")]) # 统计正常范围内的记录数 valid_count = nrow(subset(crimedata, Lat > 42 & Lat <43 & Long < -70 & Long > -72)) cat("有效经纬度记录数:", valid_count, "总记录数:", nrow(crimedata), "\n")
公开的波士顿犯罪事件数据集普遍存在大量经纬度为空、填0的无效记录,这些记录转换为空间点后会被识别为无效值或者落在可视区域外。
- 第三步:过滤无效值后绘图
确认存在大量无效值后,过滤有效记录再绘制即可:
# 过滤符合波士顿范围的有效记录 valid_crime = subset(crimedata, Lat > 42.2 & Lat < 42.4 & Long < -70.8 & Long > -71.2) # 注意坐标顺序为先经度后纬度 points = st_as_sf(valid_crime, coords = c("Long", "Lat"), crs = 4326) plot(points$geometry, pch=16, col="navy")
内容的提问来源于stack exchange,提问作者confusedpanda
相关产品推荐
相关产品推荐

