簡體   English   中英

柵格和點的單一色鍵Levelplot R

[英]Single colorkey for raster and points Levelplot R

使用下面的示例數據,如何使用與下面顯示的“手動”連接的圖相同的色鍵生成柵格和空間點圖?

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)如何確定面板的順序? 也就是說,使用index.cond像在levelplot一樣放置特定圖的行和列。

在此處輸入圖片說明

首先,您可能應該確保點圖中的中斷與第一個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.rect() print(pr, newpage = FALSE)即可查看我的意思) 。

然后,可以通過使用網格包中的視口輕松地實現實際的繪圖布置。

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)

arranged_plots

這是我使用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)
  • 使用rasterVis::levelplot繪制Raster*對象:

     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"))) 

柵格+點

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM