我正试图在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()
这是输出:
答案 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()
对于防止这种情况发生的更彻底或明智的解决方案,我很难过。使用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个匹配项。
我会建议将其作为编辑,但我还没有特权。