请求协助绘制Choropleth Map:指定国家显示计数,其余设为灰白
解决方案
你需要将目标国家的计数数据与世界地图数据合并,再通过映射填充值实现指定国家着色、其余国家置灰的效果。修改后的完整代码如下:
library(ggplot2) library(see) library(maps) library(dplyr) # 用于数据合并操作 # 目标国家及对应计数 countries <- c("Mexico", "USA", "Germany", "France", "Spain", "China", "India", "Australia") count_response <- c(80, 200, 180, 175, 140, 250, 230, 240) # 合并为数据框,列名匹配地图数据的region字段 country_counts <- data.frame(region = countries, count = count_response) # 获取世界地图数据并与计数数据左连接 worldMap <- map_data("world") %>% left_join(country_counts, by = "region") # 绘制 choropleth 地图 ggplot(data = worldMap, aes(x = long, y = lat, group = group, fill = count)) + geom_polygon(colour = "black", linewidth = 0.2) + # 调整边框粗细优化视觉 # 设置颜色渐变,未指定国家(NA值)填充为浅灰色,也可改为白色#ffffff scale_fill_gradient(low = "#f7fbff", high = "#08306b", na.value = "#e0e0e0", name = "响应计数") + labs(x = "经度", y = "纬度", title = "各国响应计数分布图") + theme_lucid() + theme(axis.text = element_blank(), # 隐藏经纬度文本,聚焦地图数据 axis.ticks = element_blank())
关键步骤说明:
- 数据关联:用
left_join将目标国家的计数数据与地图数据绑定,未指定国家会保留NA值,用于后续设置统一填充色。 - 填充映射:在
aes中加入fill = count,将计数值直接映射到国家区域的填充颜色。 - NA值处理:通过
scale_fill_gradient的na.value参数,将未指定国家的填充色设为浅灰色(或白色),区分目标国家与其他区域。 - 视觉优化:隐藏经纬度的文本和刻度,减少冗余元素;调整边框粗细让地图轮廓更清晰。
内容的提问来源于stack exchange,提问作者chi2
相关产品推荐
相关产品推荐

