如何自定义亚洲国家Choropleth地图:添加国名与湖泊显示
解决方案
以下是修改后的代码,可实现添加国家名称标签和湖泊的需求:
library(ggplot2) library(maps) library(dplyr) # 用于数据分组和筛选 datar <- data.frame(GEO = c("AR","AZ","TR","GA","IR"), Value = c(0.2560,0.023,0.0120,0.158,0.0025), search_countries = factor(c("Armenia","Azerbaijan","Turkey","Georgia","Iran")), countries = c("Armenia","Azerbaijan","Turkey","Georgia","Iran") ) # 获取目标国家的地图数据 mapa <- map_data('world', region = datar$search_countries) # 获取目标区域内的湖泊数据(缩小范围提升渲染效率) lakes <- map_data('lakes') |> filter(long > 30 & long < 60 & lat > 35 & lat < 45) # 计算每个国家的中心坐标(用于标注名称) country_centers <- mapa |> group_by(region) |> summarize( long_center = median(long), lat_center = median(lat) ) ggplot() + # 绘制湖泊层 geom_polygon(data = lakes, aes(x = long, y = lat, group = group), fill = "#a8d1ff", color = "white", size = 0.2) + # 绘制基础陆地轮廓 geom_map(data = mapa, map = mapa, aes(x = long, y = lat, map_id = region)) + # 绘制 Choropleth 填充层 geom_map(data = datar, map = mapa, aes(fill = Value, map_id = countries), color ='black', size = .25) + # 添加国家名称标签 geom_text(data = country_centers, aes(x = long_center, y = lat_center, label = region), size = 3, color = "black", fontface = "bold") + coord_map() + # 优化填充色视觉效果(可根据需求替换) scale_fill_viridis_c(option = "plasma") + theme_minimal() + # 隐藏无关坐标轴元素,聚焦地图本身 theme(axis.text = element_blank(), axis.title = element_blank())
关键修改说明:
添加湖泊:
- 调用
map_data('lakes')获取全球湖泊数据,通过filter筛选出目标区域(亚洲西南部)的湖泊,避免加载冗余数据。 - 用
geom_polygon绘制湖泊,设置浅蓝色填充和白色边框,与陆地形成清晰区分。
- 调用
添加国家名称标签:
- 对国家地图数据按
region分组,计算经纬度中位数作为标签位置(相比均值,中位数更不易被边界偏移影响)。 - 使用
geom_text将国家名称标注在中心位置,通过字体大小和样式提升可读性。
- 对国家地图数据按
额外优化:
- 加入
scale_fill_viridis_c优化填充色的视觉表现,你可以替换为scale_fill_gradient等自定义配色方案。 - 用
theme_minimal隐藏坐标轴元素,让地图布局更简洁。
- 加入
内容的提问来源于stack exchange,提问作者silent_hunter
相关产品推荐
相关产品推荐

