如何在R语言的世界地图上添加数值标签?
如何在rworldmap绘制的地图上添加数值标签
我希望地图呈现为带有国家数值标注的填色地图,请问如何为当前绘制的地图添加数值标签?以下是我目前的代码:
library(rworldmap) instorks_trends <- data.frame( Country = c("Portugal", "Spain", "Belgium", "Denmark", "Germany", "France", "Netherlands", "Sweden", "Switzerland","Liechtenstein", "Luxembourg","Finland", "Estonia", "Latvia", "Lithuania", "Austria", "Poland", "Russia", "Slovakia", "Slovenia", "Czech Republic", "Ukraine", "Hungary", "Belarus", "Albania", "Bulgaria", "Greece", "Croatia", "Italy", "Macedonia", "Moldova", "Romania", "Serbia", "Montenegro", "Kosovo", "Turkey", "Algeria", "Morocco", "Libya", "Tunisia", "Armenia", "Azerbaijan", "Georgia", "Iran","Iraq", "Israel", "Syria", "Uzbekistan","Tajikistan","Kazakhstan","Kyrgyzstan","Turkmenistan", "South Africa"), '2014' = c(11691, 46000, 105, 2, 6152, 2579, 950, 44, 376, 6, 2, 1, 5000, 13900, 19500, 391, 52735, 9000, 1231, 266, 792, 40000, 4950, 22300, 4, 5671, 2357, 1756, 262, 817, 190, 4374, 1248, 1, 40, 8693, NA, 2931, 1400,NA, 644, 278, 104, NA, 70, NA, 4, 1200, 8, 24, 20, 0, NA), '2004' = c(7685, 33217, 50, 3, 4482, 941, 523, 29, 198, 0, 0, 0, 4500, 10600, 13000, 395, 52500, 10200, 1331, 240, 814, 30000, 5300, 21362, 3, 4826, 2157, 1700, 70, NA, NA, 5000, NA, NA, NA, 6195, 6601, 1802, 25, 572, 548, NA, NA, NA, NA, NA, NA, 745, NA, NA, NA, NA, 6) ) world_map <- getMap(resolution = "coarse") joined_map <- joinCountryData2Map(instorks_trends, joinCode = "NAME", nameJoinColumn = "Country") mapCountryData(joined_map, nameColumnToPlot = "X2014", catMethod = "quantiles", mapRegion = "Europe", missingCountryCol = gray(0.8), colourPalette = "red", mapTitle = "", addLegend = FALSE, borderCol = "black")
解决方案
可以通过提取国家中心坐标,结合text()函数添加数值标签,修改后的完整代码如下:
library(rworldmap) instorks_trends <- data.frame( Country = c("Portugal", "Spain", "Belgium", "Denmark", "Germany", "France", "Netherlands", "Sweden", "Switzerland","Liechtenstein", "Luxembourg","Finland", "Estonia", "Latvia", "Lithuania", "Austria", "Poland", "Russia", "Slovakia", "Slovenia", "Czech Republic", "Ukraine", "Hungary", "Belarus", "Albania", "Bulgaria", "Greece", "Croatia", "Italy", "Macedonia", "Moldova", "Romania", "Serbia", "Montenegro", "Kosovo", "Turkey", "Algeria", "Morocco", "Libya", "Tunisia", "Armenia", "Azerbaijan", "Georgia", "Iran","Iraq", "Israel", "Syria", "Uzbekistan","Tajikistan","Kazakhstan","Kyrgyzstan","Turkmenistan", "South Africa"), '2014' = c(11691, 46000, 105, 2, 6152, 2579, 950, 44, 376, 6, 2, 1, 5000, 13900, 19500, 391, 52735, 9000, 1231, 266, 792, 40000, 4950, 22300, 4, 5671, 2357, 1756, 262, 817, 190, 4374, 1248, 1, 40, 8693, NA, 2931, 1400,NA, 644, 278, 104, NA, 70, NA, 4, 1200, 8, 24, 20, 0, NA), '2004' = c(7685, 33217, 50, 3, 4482, 941, 523, 29, 198, 0, 0, 0, 4500, 10600, 13000, 395, 52500, 10200, 1331, 240, 814, 30000, 5300, 21362, 3, 4826, 2157, 1700, 70, NA, NA, 5000, NA, NA, NA, 6195, 6601, 1802, 25, 572, 548, NA, NA, NA, NA, NA, NA, 745, NA, NA, NA, NA, 6) ) world_map <- getMap(resolution = "coarse") joined_map <- joinCountryData2Map(instorks_trends, joinCode = "NAME", nameJoinColumn = "Country") # 绘制基础填色地图 mapCountryData(joined_map, nameColumnToPlot = "X2014", catMethod = "quantiles", mapRegion = "Europe", missingCountryCol = gray(0.8), colourPalette = "red", mapTitle = "", addLegend = FALSE, borderCol = "black") # 提取国家中心经纬度及对应2014年数值 label_info <- data.frame( lon = joined_map$centroidLon, lat = joined_map$centroidLat, value = joined_map$X2014 ) # 过滤无数据的国家 label_info <- na.omit(label_info) # 添加数值标签,可调整cex(字体大小)、col(颜色)参数 text(label_info$lon, label_info$lat, labels = label_info$value, cex = 0.6, col = "black")
关键说明
joined_map对象自带centroidLon和centroidLat字段,对应每个国家的中心坐标- 用
na.omit()过滤掉没有2014年数据的国家,避免绘制无效标签 - 通过
text()函数在坐标位置添加数值,可根据地图大小调整cex参数控制标签字体大小
内容的提问来源于stack exchange,提问作者user22887359
相关产品推荐
相关产品推荐

