[R-pkg-devel] Problem with S4 method for plotting a raster file
Jacob Nabe-Nielsen
jnn @end|ng |rom b|o@@@u@dk
Wed Apr 14 11:41:28 CEST 2021
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
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 using landscape, x using type, sep=" - ")
}
# Define colours specific or 'type'
if(missing(col) && x using 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 using crs=="NA") {
crs2 <- sp::CRS(as.character(NA))
} else {
crs2 <- sp::CRS(x using crs)
}
rdata <- raster::raster(x=x using data, xmn=x using ext$xleft, xmx=x using ext$xright,
ymn=x using ext$ybottom, ymx=x using 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 using crs)
rdata <- raster::raster(x = x using data, xmn = x using ext$xleft,
xmx = x using ext$xright, ymn = x using ext$ybottom, ymx = x using 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.
Best regards,
Jacob
[[alternative HTML version deleted]]
More information about the R-package-devel
mailing list