4

使用下面的示例数据,我如何生成具有与下面显示的“手动”连接图中相同的颜色键的栅格和空间点图?

library(rasterVis)
library(raster)
library(colorRamps)
col=colorRampPalette(matlab.like2(255))

s <- stack(replicate(2, raster(matrix(runif(100), 10))))
xy <- data.frame(coordinates(sampleRandom(s, 10, sp=TRUE)),
                 z1=runif(10), z2=runif(10))

levelplot(s, margin=FALSE, at=seq(0, 1, 0.05),col.regions=col)
x=xy$x;y=xy$y;z=xy$z1

levelplot(z ~ x + y,contour=F, panel = panel.levelplot.points, 
          margin=FALSE,col.regions=col,
          par.settings=list(axis.line=list(lwd=3), strip.border=list(lwd=3)),
         cex=1.4, scales=list(x=list(cex=1.7),y=list(cex=1.7)),xlab=list(label="Longitude",cex=2),
          ylab=list(label="Latitude",cex=2))

样本图

感谢@fdestch,我能够使用以下方法生成以下图:

latticeCombineGrid(mget(rep("pp", 24)), layout = c(3, 8))

遵循我对使用相同颜色键打印多个绘图的评论。

一个有待澄清的问题:

1)如何决定面板的顺序?也就是说,就像levelplot使用index.cond.

在此处输入图像描述

4

2 回答 2

4

首先,您可能应该确保点图中的断点与第一个中定义的断点相同levelplot

## raster plot with colorkey disabled
pr <- levelplot(s, margin = FALSE, at = seq(0, 1, 0.05), col.regions = col, 
                colorkey = FALSE, xlab = list("Longitude", col = "transparent"))

## points plot 
pp <- levelplot(z ~ x + y, panel = panel.levelplot.points, cex = 1.4, 
                contour = FALSE, margin = FALSE, col.regions = col, 
                colorkey = list(at = seq(0, 1, .05), width = .6, height = .6),
                xlab = "Longitude", ylab = "Latitude")

xlab在创建光栅图时请注意透明的定义。这个小解决方法在以后使用时非常方便downViewport,以确保实际的绘图边界prpp重叠(请随时运行grid.rect()print(pr, newpage = FALSE)了解我的意思)。

然后可以通过使用grid包中的视口轻松实现实际的绘图布置。

library(grid)
library(lattice)

## initialize new grid device
grid.newpage()

## add raster plot
vp1 <- viewport(x = 0, y = 0, width = .5, height = 1, 
                just = c("left", "bottom"))

pushViewport(vp1)
print(pr, newpage = FALSE)

## add points plot
downViewport(trellis.vpname("page"))

vp2 <- viewport(x = 1, y = 0, width = .75, height = 1, 
                just = c("left", "bottom"))
pushViewport(vp2)
print(pp, newpage = FALSE)

安排好的情节

于 2016-04-06T06:50:50.000 回答
1

这是我使用的解决方案latticeExtra::c.trellis

library(raster)
library(rasterVis)

s <- stack(replicate(2, raster(matrix(runif(100), 10))))
xy <- data.frame(coordinates(sampleRandom(s, 10, sp=TRUE)),
                 z1=runif(10), z2=runif(10))

## Define theme and breaks
myTheme <- BTCTheme()
my.at <- seq(0, 1, 0.05)
  • 绘制Raster*对象,使用rasterVis::levelplot

    p1 <- levelplot(s, margin=FALSE,
                        at = my.at,
                        par.settings = myTheme)
    
  • 绘制点,使用lattice::levelplot

    p2 <- levelplot(z1 ~ x + y, data = xy,
                        at = my.at, 
                        panel = panel.levelplot.points,
                        par.settings = myTheme)
    
  • 加入他们latticeExtra::c.trellis

    p3 <- c(p1, p2, layout = c(3, 1))
    
  • 不幸c.trellis的是,没有正确分配条形标签,因此您必须直接定义它们:

    update(p3,
        strip = strip.custom(factor.levels = c(names(s), "Points")))
    

光栅+点

于 2016-04-09T07:36:53.993 回答