绘制栅格时将 par() 设置更改为默认值

Changing par() settings to default when plotting rasters

当运行以下代码时,R返回如下图所示。

我应该如何更改我的 par() 设置(如下所示)以使其 returns 成为单个图像?我认为这是因为我手动更改了 par() 设置。有没有办法将 par() 设置为默认设置,鉴于我不知道我的默认设置是什么

library(raster)
r1 <- brick(system.file("external/rlogo.grd", package="raster"))
plotRGB(r1)
plot(r1, xlim=c(0, 50), ylim=c(0, 50))


> par()
$xlog
[1] FALSE

$ylog
[1] FALSE

$adj
[1] 0.5

$ann
[1] TRUE

$ask
[1] FALSE

$bg
[1] "white"

$bty
[1] "o"

$cex
[1] 1

$cex.axis
[1] 1

$cex.lab
[1] 1

$cex.main
[1] 1.2

$cex.sub
[1] 1

$cin
[1] 0.2000000 0.2666667

$col
[1] "black"

$col.axis
[1] "black"

$col.lab
[1] "black"

$col.main
[1] "black"

$col.sub
[1] "black"

$cra
[1] 14.4 19.2

$crt
[1] 0

$csi
[1] 0.2666667

$cxy
[1] 3.659406 4.879208

$din
[1] 9.000000 4.208333

$err
[1] 0

$family
[1] ""

$fg
[1] "black"

$fig
[1] 0 1 0 1

$fin
[1] 9.000000 4.208333

$font
[1] 1

$font.axis
[1] 1

$font.lab
[1] 1

$font.main
[1] 2

$font.sub
[1] 1

$lab
[1] 5 5 7

$las
[1] 0

$lend
[1] "round"

$lheight
[1] 1

$ljoin
[1] "round"

$lmitre
[1] 10

$lty
[1] "solid"

$lwd
[1] 1

$mai
[1] 1.360000 1.093333 1.093333 0.560000

$mar
[1] 5.1 4.1 4.1 2.1

$mex
[1] 1

$mfcol
[1] 1 1

$mfg
[1] 1 1 1 1

$mfrow
[1] 1 1

$mgp
[1] 3 1 0

$mkh
[1] 0.001

$new
[1] FALSE

$oma
[1] 0 0 0 0

$omd
[1] 0 1 0 1

$omi
[1] 0 0 0 0

$page
[1] TRUE

$pch
[1] 1

$pin
[1] 9.000000 4.208333

$plt
[1] 0 1 0 1

$ps
[1] 16

$pty
[1] "m"

$smo
[1] 1

$srt
[1] 0

$tck
[1] NA

$tcl
[1] -0.5

$usr
[1] -31.83663 132.83663   0.00000  77.00000

$xaxp
[1]   0 100   2

$xaxs
[1] "r"

$xaxt
[1] "s"

$xpd
[1] FALSE

$yaxp
[1]  0 70  7

$yaxs
[1] "r"

$yaxt
[1] "s"

$ylbias
[1] 0.2

raster 对象的 plot 方法根据 raster 的层数重新定义了 mfrow

您的光栅图像具有三层(每个波段一层:红色、绿色和蓝色),如下所示:

r1

## class       : RasterStack 
## dimensions  : 77, 101, 7777, 3  (nrow, ncol, ncell, nlayers)
## resolution  : 1, 1  (x, y)
## extent      : 0, 101, 0, 77  (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=merc 
## names       : red, green, blue 
## min values  :   0,     0,    0 
## max values  : 255,   255,  255 

因此,绘制时,mfrow 设置为 c(2, 2) 以容纳三个图层。

查看 getMethod('plot', 'Raster') 了解幕后发生的事情。这是其中的一部分:

...
if (nl > 1) {
      if (missing(nc)) {
        nc <- ceiling(sqrt(nl))
      }
      else {
        nc <- max(1, min(nl, round(nc)))
      }
      if (missing(nr)) {
        nr <- ceiling(nl/nc)
      }
      else {
        nr <- max(1, min(nl, round(nr)))
        nc <- ceiling(nl/nr)
      }
      old.par <- par(no.readonly = TRUE)
      on.exit(par(old.par))
      par(mfrow = c(nr, nc), mar = c(4, 4, 2, 2))
...

如果您只想绘制一个波段(图层)或其中的两个波段,您可以使用以下内容,在这种情况下 mfrow 将设置为 c(1, 1)c(1, 2),分别为:

plot(r1[[3]])   # third band; equivalently, plot(r1, 3)
plot(r1[[1:2]]) # bands 1 and 2; equivalently, plot(r1, 1:2)

如@RobertH 所述,您可以使用 plot 方法的 nc 参数修改布局,例如plot(r1, nc=1) 将为您提供一列三个图。


相比之下,raster::plotRGB 将此类 RGB raster 对象绘制为单个 RGB 图像。