Dear all,
I have just discovered an error in a package that I have already
uploaded to
CRAN, and cannot figure out how to fix it. All help will be greatly
appreciated.
The package is called DEPONS2R, and is available from:
https://cran.r-project.org/web/packages/DEPONS2R/index.html
<https://cran.r-project.org/web/packages/DEPONS2R/index.html>
The problem is related to one of the included examples, where I plot
the coastline
on top of a raster file. In the example, where the plotting is
embedded in
an S4 method called plot.DeponsRaster, the coastline does not show.
But if
I run the functions that the method is composed of, everything works
fine (see
below). So I am wondering if the graphics devise is not passed on
correctly
within the package, or what actually happens.
The example that does not run correctly is available from
?plot.DeponsRaster:
library(DEPONS2R)
data("bathymetry")
plot(bathymetry)
data("coastline")
library(rgdal)
# Change projection of coastline to match that of bathymetry data
coastline2 <- spTransform(coastline, crs(bathymetry))
plot(coastline2, add=TRUE, col="lightyellow2")
Here the coastline is not plotted. The method is defined as:
setMethod("plot", signature("DeponsRaster", "ANY"),
function(x, y, maxpixels=500000, col, alpha=NULL, colNA=NA,
add=FALSE,
ext=NULL, useRaster=TRUE, interpolate=FALSE,
addfun=NULL,
nc, nr, maxnl=16, main, npretty=0, axes=TRUE,
legend=TRUE, trackToPlot=1, ...) {
oldpar <- graphics::par(no.readonly = TRUE)
on.exit(graphics::par(oldpar))
if (missing(main)) {
main <- paste(x@landscape, x@type, sep=" - ")
}
# Define colours specific or 'type'
if(missing(col) && x@type=="bathymetry") {
tmp.col <- grDevices::rainbow(1000)[501:800]
col <- c(tmp.col[1:100], rep(tmp.col[101:250], each=5))
}
# Use {raster}-package for plotting
if(x@crs=="NA") {
crs2 <- sp::CRS(as.character(NA))
} else {
crs2 <- sp::CRS(x@crs)
}
rdata <- raster::raster(x=x@data, xmn=x@ext$xleft,
xmx=x@ext$xright,
ymn=x@ext$ybottom, ymx=x@ext$ytop,
crs=crs2)
raster::plot(rdata, col=col, main=main,
alpha=alpha, add=add, ext=ext, axes=axes,
legend=legend)
}
)
But when I use the functions that are at the core of this method it is
not a problem adding the coastline correctly:
x <- bathymetry
crs2 <- raster::crs(x@crs)
rdata <- raster::raster(x = x@data, xmn = x@ext$xleft,
xmx = x@ext$xright, ymn = x@ext$ybottom, ymx = x@ext$ytop,
crs = crs2)
raster::plot(rdata)
plot(coastline2, add=TRUE, col="lightyellow2")
If would be fantastic if someone can figure out how I should modify
the method
to plot the coastline correctly on top of the map.