光栅和点的单色键 Levelplot R
Single colorkey for raster and points Levelplot R
使用下面的示例数据,我如何生成与下面显示的 "manually" 连接图中相同颜色键的栅格和空间点图?
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
时非常方便,以确保 pr
和 pp
的实际绘图边界重叠(随意 运行 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)
这是我使用 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")))
使用下面的示例数据,我如何生成与下面显示的 "manually" 连接图中相同颜色键的栅格和空间点图?
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
时非常方便,以确保 pr
和 pp
的实际绘图边界重叠(随意 运行 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)
这是我使用 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")))