如何使用R maps包中的maps.text标记国家而不是区域

时间:2016-01-25 15:21:25

标签: r maps spatial

在地图包的文档中似乎没有任何示例,或者在试图用文本或其他信息代替国家名称而不是国家/地区内的任何人的堆栈溢出时出现任何示例。

library(maps)

test <- structure(list(countries = structure(c(3L, 4L, 2L, 1L), .Label = c("France", 
"Germany", "Italy", "UK"), class = "factor"), value = c(20, 13, 
42, 6)), .Names = c("countries", "value"), row.names = c(NA, 
-4L), class = "data.frame")

map.text("world", c("France", "Germany", "Italy", "UK"))

Map with all regions labelled, rather than just the country names

我打算用值替换国家/地区名称。解决方案可能类似于

map.text("world",test$countries, labels=test$values)

但是我无法弄清楚如何让它省去所有不必要的区域标签。

1 个答案:

答案 0 :(得分:2)

map.text尝试将区域与正则表达式匹配,从而导致问题。您可以使用exact = TRUE来禁用此功能,也可以在每个之后添加$(行尾)来利用它。但是,英国并不严格地说是一个国家,所以你需要选择组成部分,或以其他方式解决它。

总而言之,

map.text("world", region = c("France$", "Germany$", "Italy$", 
                            "UK:Great Britain", "UK:Northern Ireland"))

返回 plot with 5 names 哪个更好,如果不是完美的话。设置标签让我们看起来像我们想要的那样:

map.text("world", region = c("France$", "Germany$", "Italy$", 
                             "UK:Great Britain", "UK:Northern Ireland"), 
         labels = c("France", "Germany", '', "UK", "Italy"))

plot with four names 仔细,在标签参数中的顺序是挑剔的。

如果你重建test

test <- data.frame(countries = c("Germany$", "France$", "UK:Northern Ireland", 
                                 "UK:Great Britain", "Italy$"),
                   value = c(42, 6, '', 13, 20), stringsAsFactors = FALSE)

所以它看起来像

> test
            countries value
1            Germany$    42
2             France$     6
3 UK:Northern Ireland      
4    UK:Great Britain    13
5              Italy$    20

您可以将value列标记为标签:

map.text("world", region = test$countries, labels = test$value)

plot with number labels