如何让我的 SpatialPolygonsDataFrame 在我的 RasterLayer 上正确绘制

How can I get my SpatialPolygonsDataFrame to plot correctly over my RasterLayer

当我尝试绘制以下内容时遇到问题。

我已经用栅格像元 ID 创建了我的研究区域的遮罩和一个带有我研究区域的国家/地区轮廓的 shapefile。 shapefile 是通过合并国家/地区的 shapefile,然后将其裁剪到研究区域而创建的。 (这是必需的,因为世界国家 shapefile 不够详细)

R version 3.3.3 (2017-03-06) -- "Another Canoe"
Copyright (C) 2017 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)
library(raster)
library(maptools)
library(rgdal)

#load Mask
sa.ID <- raster("Masks/sa.ID.asc")
proj4string(sa.ID) <- "+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0"
sa.ID

class       : RasterLayer 
dimensions  : 177, 266, 47082  (nrow, ncol, ncell)
resolution  : 0.08333333, 0.08333333  (x, y)
extent      : 118.8333, 141, -9.166667, 5.583333  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0  
data source : ....\Masks\sa.ID.asc 
names       : sa.ID 

#load countries shapefile
countries.ra <- readOGR(dsn="diva-gis/Adm areas", layer="countries.ra")
countries.ra

class       : SpatialPolygonsDataFrame 
features    : 4 
extent      : 118.8, 141, -9.2, 5.6  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0 
variables   : 70
names       : GADMID, ISO,  NAME_ENGLI,    NAME_ISO,    NAME_FAO,  NAME_LOCAL,                                                                                                       NAME_OBSOL,                  NAME_VARIA, NAME_NONLA,                   NAME_FRENC,     NAME_SPANI,            NAME_RUSSI,          NAME_ARABI, NAME_CHINE, WASPARTOF, ... 
min values  :    103, IDN,  East Timor,   INDONESIA,   Indonesia,   Indonesia,                                                      British New Guinea|German New Guinea|New Britain|New Guinea, East Timor|Portuguese Timor,         NA,                   Indonésie,      Filipinas, ????? — ????? ??????, ????? ????? ???????,        ???,        NA, ... 
max values  :    222, TLS, Philippines, TIMOR-LESTE, Timor-Leste, Timor-Leste, Dutch Borneo|Dutch East Indies|Dutch New Guinea|East Indies|Netherlands Indies|West New Guinea|Nederlands Indië,                 Philippines,         NA, Timor-Leste (Timor Oriental), Timor Oriental,       ????????? ?????,           ?????????,    ???????,        NA, ... 

现在我尝试在顶部绘制国家图层的蒙版

plot(sa.ID, xlim=c(118.8,141), ylim=c(-9.2,5.6), axes=TRUE)
plot(countries.ra, add=T)

最初,我得到的图看起来不错,但是当图 window 的范围发生变化时,或者当我尝试保存它时,国家/地区的形状会随之改变,而不是停留在应有的位置(见 sa.ID )

但不知何故,当我改变它并绘制

plot(sa.ID, xlim=c(118.8,141), ylim=c(-9.2,5.6), axes=TRUE)
plot(countries.ra, add=T)

国家/地区形状保持不变(参见 sa.ID.inverse)。 但是,由于我需要顶部的清晰线条,所以我真的需要第一个才能工作。

有人可以帮助我吗?因为我真的看不出我可能做错了什么...

eta:我的范围掩码(每个栅格单元都有值)和世界国家 shapefile

有同样的问题

根据@Bastien 的评论,我认为您可以尝试使用:

plot.window(xlim, ylim, log = "", asp = NA, ...)

指定地块的尺寸window。我不确定你希望你的情节如何出现,但效果如下:

plot.window(xlim=c(118.8333, 141), ylim=( -9.166667, 5.583333))

如果您指定这些值,它应该强制 R 每次都正确地重新绘制绘图window。