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

时间:2017-03-29 14:18:55

标签: r plot raster shapefile

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

我创建了一个带有栅格单元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)

最初,我得到的情节看起来不错,但是当情节窗口的范围发生变化时,或者当我试图保存它时,国家会随之改变形状而不是保持应有的状态(参见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存在同样的问题

1 个答案:

答案 0 :(得分:0)

关于@Bastien的评论,我想您可以尝试使用:

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

指定绘图窗口的尺寸。我不确定你希望你的情节出现在什么样的地方,但是有什么影响:

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

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