使用merge结合数据与Shapefile绘制美国加州邮编地图遇渐变填充问题
问题解决方案
1. 警告信息修复
警告的核心原因是scale_fill_gradientn参数使用错误:你把na.value写在了values向量里,R会尝试将字符串"gray"转换为数值,从而触发"NAs introduced by coercion"警告。需要将na.value作为独立参数传递给颜色刻度函数。
2. 渐变填充逻辑修正
scale_fill_gradientn的values参数需要传入0到1之间的相对比例值(对应数据最小值到最大值的位置),而非原始数值。你可以用scales::rescale()自动将原始断点转换为比例值,确保渐变映射符合预期。
修正后完整代码
library(tigris) library(ggplot2) library(dplyr) library(scales) # 获取加州ZCTA地理数据 zipcode <- zctas(year = 2000, state = "CA", cb = TRUE) # 统一邮编列类型(避免因类型不匹配导致合并失败) # 若你的ca数据中邮编列名为其他(如zip),替换成对应名称 ca <- ca %>% mutate(ZCTA = as.character(ZCTA)) zipcodes <- merge(zipcode, ca, by = "ZCTA", all.x = TRUE) %>% rename(COUNT = "Count") # 绘制地图 ggplot() + geom_sf(data = zipcodes, aes(fill = COUNT)) + scale_fill_gradientn( colors = c("red", "cornsilk", "#f0d080"), # 将原始数值断点转换为0-1的相对比例 values = rescale(c(1, 14150, 28307)), # 单独设置无计数邮编的填充色 na.value = "gray", # 图例名称(可选) name = "计数" ) + theme_minimal()
额外注意事项
- 合并数据前必须确保
ZCTA列类型一致:若你的ca数据中邮编是数值类型,需转为字符类型(避免丢失前导零,导致匹配失败)。 - 若渐变方向不符合预期,可调整
colors的顺序,或添加guide = guide_colorbar(reverse = TRUE)反转渐变方向。
内容的提问来源于stack exchange,提问作者Yvonne
相关产品推荐
相关产品推荐

