7

我正在尝试使用 R 的 mapproj 库中的 World2Hires 绘制太平洋地图,但是当我尝试填充这些国家/地区时出现了一个奇怪的故障。我该如何解决?

library(maps)
library(mapproj)
library(mapdata)
map("world2Hires", 
    xlim=c(120, 260), 
    ylim=c(-60, 40), 
    boundary=TRUE, 
    interior=TRUE,
    fill=TRUE,
    col="gray30",
)
map.axes()

这是输出:

破损的地图图像

4

2 回答 2

7

问题似乎与导致缠绕的一小部分区域有关。通过一些试验和错误来保存原始map调用mapnames <- map(...),然后将此列表的子集传递regions=给新调用中的参数,我可以避免填充的环绕。例如:

library(maps)
library(mapproj)
library(mapdata)
map("world2Hires", regions=mapnames$names[c(1:7,14:641)],
    xlim=c(120, 260), 
    ylim=c(-60, 40), 
    boundary=TRUE, 
    interior=TRUE,
    fill=TRUE
)
map.axes()

在此处输入图像描述

至于防止这种情况发生的更彻底或更明智的解决方案,我很难过。使用该wrap=选项没有任何帮助,对于其他选项也是如此。附带说明一下,使用数据库时不会出现此问题"world",而只会弹出"world2"and "world2Hires"

于 2013-09-25T01:25:26.790 回答
5

@thelatemail 的答案是我见过的解决这个问题的最好和最简单的解决方案。但是,为了使其更通用,最好按名称删除多边形。这是因为根据您首次调用 map() 的限制,多边形名称的索引可能会有所不同。

library(maps)
library(mapproj)
library(mapdata)

mapnames <- map("world2Hires", xlim=c(120, 260), ylim=c(-60, 40),
                fill=TRUE, plot=FALSE)

mapnames2 <- map("world2Hires", xlim=c(100, 200), ylim=c(-20, 60),
                 fill=TRUE, plot=FALSE)

mapnames$names[10]
[1] "Mali"
mapnames2$names[10]
[1] "Thailand"

有 8 个国家与本初子午线相交:英国、法国、西班牙、阿尔及利亚、马里、布基纳法索、加纳和多哥。通过将这些国家名称与 匹配mapnames$names,您可以删除多边形,而不管您的原始范围如何:

remove <- c("UK:Great Britain", "France", "Spain", "Algeria", "Mali",
            "Burkina Faso", "Ghana", "Togo")

map("world2Hires", regions=mapnames$names[!(mapnames$names %in% remove)],
    xlim=c(120, 260), 
    ylim=c(-60, 40), 
    boundary=TRUE, 
    interior=TRUE,
    fill=TRUE
)
map.axes()

您也可以使用 grepl() 但由于多边形是按层次命名的,您可以删除相关国家的一些子多边形。例如,mapnames$names[grepl("UK", mapnames$names)]返回 34 个匹配项。

我会建议将此作为编辑,但我还没有特权。

于 2014-07-31T22:58:05.040 回答