为什么在R中绘制光栅时盒子如此宽阔?

时间:2017-11-12 03:26:06

标签: r r-raster

我想使用以下代码绘制栅格:

library(raster)
tmp <- scan(what='') 
'D:\temp\m2001EOS.tif'

ra<-raster(tmp)
plot(ra)

ra归属如下:

class       : RasterLayer 
dimensions  : 1941, 1832, 3555912  (nrow, ncol, ncell)
resolution  : 981.8572, 981.8572  (x, y)
extent      : 4723620, 6522382, 4203136, 6108921  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=aea +lat_1=25 +lat_2=47 +lat_0=0 +lon_0=105 +x_0=4000000 +y_0=0 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0 
data source : D:\temp\m2001EOS.tif 
names       : m2001EOS 
values      : -32768, 32767  (min, max)

enter image description here

情节很宽,与xminxmax不匹配,但yminymax的高度范围似乎合理。哪个参数导致不同的模式? 以及如何调整盒子轮廓? 示例文件为m2001EOS.tif

1 个答案:

答案 0 :(得分:2)

使用火山数据集,我们可以得到一个简单的可重现示例,不需要从远程链接下载数据:

library(raster)
plot(raster(volcano))

enter image description here

绘制栅格时(使用raster::plot):

  1. 边界框的形状由绘制它的设备窗口的纵横比(形状)决定。
  2. 尺度大小在x和y方向上被强制相同,因为这是空间数据的标准做法(因为我们不想通过将空间数据拉伸到适合框的方式来扭曲空间数据的形状)。我们可以在上面的示例图中看到这一点,因为栅格正好是方形的。
  3. 鉴于这两个约束,需要用空白区域填充边界框作为直接后果。

    那么如何避免这种情况?一种方法是简单地改变绘图窗口或输出文件的高宽比。

    pdf(height = 4, width = 4)
    plot(raster(volcano))
    dev.off()
    

    enter image description here

    更好的方法是使用rasterVis::levelplot进行更好的绘图:

    library(rasterVis)
    levelplot(raster(volcano), margin = F)
    

    enter image description here