求助:基于经纬度数据绘制带袭击数的城镇地图(含标签与图例)
问题解决:空画布原因及修复方案
为什么你的代码生成空画布?
你的crimedata.csv里的经纬度是每个区域的单点坐标(比如州的中心点),但geom_polygon需要的是构成区域边界的多个连续坐标点来生成多边形图形,没有多边形的坐标集合,自然无法渲染出地图。
修复步骤
1. 安装并加载所需工具包
install.packages(c("ggplot2", "maps", "dplyr")) library(ggplot2) library(maps) library(dplyr)
2. 读取并预处理你的犯罪数据
# 读取数据集 fg <- read.csv("crimedata.csv") # 重命名州名列,统一格式以便后续匹配地理数据 fg <- fg %>% rename(state = X) fg$state <- tolower(fg$state)
3. 获取地理边界数据并合并
# 获取美国各州的多边形边界数据 us_states <- map_data("state") # 将犯罪数据与地理数据按州名关联 merged_data <- left_join(us_states, fg, by = c("region" = "state"))
4. 绘制带标签和图例的地图
p <- ggplot(merged_data, aes(x = long, y = lat, group = group, fill = Assault)) + # 绘制州界多边形,填充袭击事件数量对应的颜色 geom_polygon(color = "grey") + # 添加州名标签(使用原数据集中的中心点坐标) geom_text(data = fg, aes(x = long, y = lat, label = toupper(state), group = NULL), size = 3) + # 保持你使用的投影方式 coord_map("polyconic") + # 设置颜色渐变图例,命名为"袭击事件数量" scale_fill_viridis_c(name = "袭击事件数量") + # 去除多余的背景元素,让地图更简洁 theme_void() # 展示地图 p
内容的提问来源于stack exchange,提问作者Baz
相关产品推荐
相关产品推荐

