太平洋地图与填充国家

时间:2013-09-25 00:27:14

标签: r map

我正试图在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()

这是输出:

Broken Map Image

2 个答案:

答案 0 :(得分:7)

问题似乎是导致包装的一小部分区域。从某些试验和错误中保存原始的map调用,如mapnames <- map(...),然后在新调用中将此列表的子集传递给regions=参数,我可以避免填充的环绕。 E.g:

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()

enter image description here

对于防止这种情况发生的更彻底或明智的解决方案,我很难过。使用wrap=选项没有任何帮助,同样适用于其他选项。另请注意,此问题不会使用"world"数据库显示,而只会弹出"world2""world2Hires"

答案 1 :(得分: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个国家与Prime Meridian相交:英国,法国,西班牙,阿尔及利亚,马里,布基纳法索,加纳和多哥。通过将这些国家/地区名称与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个匹配项。

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