1# Author: Robert J. Hijmans 2# Date : June 2008 3# Version 1.0 4# Licence GPL v3 5 6 7setMethod("plot", signature(x='Raster', y='ANY'), 8 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, ...) { 9 10 hasNoCol <- missing(col) 11 if (hasNoCol) { 12 col <- rev(terrain.colors(255)) 13 } 14 15 if (!is.null(alpha)) { 16 if (inherits(alpha, 'RasterLayer')) { 17 if (!compareRaster(x, alpha)) { 18 alpha <- NULL 19 } 20 } else { 21 alpha <- pmax(pmin(alpha, 1), 0) 22 if (length(alpha) == 1) { 23 alpha <- alpha * 255 + 1 24 a <- c(0:9, LETTERS[1:6]) 25 alpha <- paste(rep(a, each=16), rep(a, times=16), sep='')[alpha] 26 col <- paste(substr(col, 1, 7), alpha, sep="") 27 alpha <- NULL 28 } 29 } 30 } 31 32 nl <- nlayers(x) 33 if (nl == 0) { 34 stop('Raster object has no cell values') 35 } 36 37 if (nl == 1) { 38 if (inherits(x, 'RasterStackBrick')) { 39 x <- raster(x, 1) 40 } 41 facvar <- 0 42 if (!missing(y)) { 43 if (is.factor(x)) { 44 facvar <- max(y, 0) 45 } 46 } 47 48 49 if ( (length(x@legend@colortable) > 0) & hasNoCol) { 50 .plotCT(x, maxpixels=maxpixels, ext=ext, interpolate=interpolate, main=main, add=add, addfun=addfun, ...) 51 } else if (! useRaster) { 52 .plotraster(x, col=col, maxpixels=maxpixels, add=add, ext=ext, main=main, addfun=addfun, ...) 53 } else { 54 .plotraster2(x, col=col, maxpixels=maxpixels, add=add, ext=ext, interpolate=interpolate, colNA=colNA, main=main, addfun=addfun, facvar=facvar, alpha=alpha, npretty=npretty, ...) 55 #.plot2(x, col=col, maxpixels=maxpixels, ...) 56 } 57 return(invisible(NULL)) 58 } 59 60 if (missing(main)) { 61 main <- names(x) 62 } 63 if (missing(y)) { 64 y <- 1:nl 65 if (length(y) > maxnl) { 66 y <- 1:maxnl 67 } 68 } else { 69 if (is.character(y)) { 70 y <- match(y, names(x)) 71 } 72 y <- unique(as.integer(round(y))) 73 y <- stats::na.omit(y) 74 } 75 76 77 if (length(y) == 1) { 78 x <- raster(x, y) 79 if ( (length(x@legend@colortable) > 0) & hasNoCol) { 80 .plotCT(x, maxpixels=maxpixels, ext=ext, interpolate=interpolate, main=main[y], addfun=addfun, ...) 81 } else if (useRaster) { 82 .plotraster2(x, col=col, colNA=colNA, maxpixels=maxpixels, main=main[y], ext=ext, interpolate=interpolate, addfun=addfun, , alpha=alpha, ...) 83 } else { 84 .plotraster(x, col=col, maxpixels=maxpixels, main=main[y], ext=ext, addfun=addfun, ...) 85 } 86 87 } else { 88 89 nl <- length(y) 90 if (missing(nc)) { 91 nc <- ceiling(sqrt(nl)) 92 } else { 93 nc <- max(1, min(nl, round(nc))) 94 } 95 if (missing(nr)) { 96 nr <- ceiling(nl / nc) 97 } else { 98 nr <- max(1, min(nl, round(nr))) 99 nc <- ceiling(nl / nr) 100 } 101 102 old.par <- graphics::par(no.readonly = TRUE) 103 on.exit(graphics::par(old.par)) 104 graphics::par(mfrow=c(nr, nc), mar=c(2, 2, 2, 4)) 105 xa='n' 106 rown=1 107 coln=0 108 maxpixels=maxpixels/nl 109 110 if (missing(main)) { 111 main <- names(x) 112 } 113 114 for (i in 1:nl) { 115 coln = coln + 1 116 if (coln > nc) { 117 coln <- 1 118 rown = rown + 1 119 } 120 if (rown==nr) xa='s' 121 if (coln==1) ya='s' else ya='n' 122 123 obj <- raster(x, y[i]) 124 if ((length(obj@legend@colortable) > 0) & hasNoCol) { 125 .plotCT(obj, maxpixels=maxpixels, ext=ext, interpolate=interpolate, main=main, addfun=addfun, ...) 126 } else if (useRaster) { 127 .plotraster2(obj, col=col, maxpixels=maxpixels, xaxt=xa, yaxt=ya, main=main[y[i]], ext=ext, interpolate=interpolate, colNA=colNA, addfun=addfun, alpha=alpha, ...) 128 } else { 129 .plotraster(obj, col=col, maxpixels=maxpixels, xaxt=xa, yaxt=ya, main=main[y[i]], ext=ext, interpolate=interpolate, addfun=addfun, ...) 130 } 131 } 132 } 133 return(invisible(NULL)) 134 } 135) 136 137 138setMethod("lines", signature(x='RasterLayer'), 139function(x, ...) { 140 if(prod(dim(x)) < 50000) { 141 stop('too many lines') 142 } 143 x <- as(x, 'SpatialPolygons') 144 lines(x, ...) 145} 146) 147 148setMethod("lines", signature(x='Extent'), 149function(x, ...) { 150 plot(x, add=TRUE, ...) 151} 152) 153