有条件地将 XY 点添加到 levelplot 生成的栅格地图
Add XY points conditionally to raster map generated by levelplot
我这里有一个棘手的 ifelse
任务。下面是我的代码,显示了两个时期的数据(future
和 current
)。数据在 xy 坐标旁边有 mean, 5th and 95th
个置信区间。我想比较两个 df(future
和 current
)的 mean, 5th and 95th
置信区间(CI)。
条件:
1) 如果 future
的 CIs
与 current
的 CIs
不重叠,并且 future 的 CI 高于当前值,则 pch=2
.
2) 如果 future
的 CIs
不与 current
的 CIs
重叠,并且 future 的 CI 低于当前值,则 pch=3
.
3) 如果未来的 CI 与当前的重叠,则 pch=4
library(raster)
library(rasterVis)
s <- stack(replicate(2, raster(matrix(runif(100), 3))))
current <- data.frame(coordinates(sampleRandom(s, 3, sp=TRUE)),
C5th=c(17.643981,16.83572,9.979904),
CMean=c(26.66364,19.74286,15.10000),C95th=c(35.68329,22.64999,20.22010))
future <- data.frame(coordinates(sampleRandom(s, 3, sp=TRUE)),
C5th=c(17.643981,16.83572,9.979904)*2,
CMean=c(26.66364,19.74286,15.10000)*2,C95th=c(35.68329,22.64999,20.22010)*2)
以上三个conditions
的结果将添加到我的地图中。
类似(只是一次尝试):
levelplot(s, margin=FALSE, at=seq(0, 1, 0.05)) +
layer(sp.points(xy, pch=ifelse(condition, 2, 3,4), cex=2, col=1), columns=1) +
layer(sp.points(xy, pch=ifelse(condition, 2, 3,4), cex=2, col=1), columns=2)
例如下图中,如果NFC的最小值(future
)完全位于AFC的最大值(current
)之上,则条件1.如果NFC的最大值位于完全低于 AFC 的最小值,则条件 1.The 下图满足条件 3.
请帮忙。
AT.
定义一个完整的SpatialPointsDataFrame
对象会更简单
根据定义的附加分类变量
你需要的条件。
library(raster)
library(rasterVis)
s <- stack(replicate(2, raster(matrix(runif(1000), 3))))
## Coordinates
cc <- sampleRandom(s, 3, sp = TRUE)
## Data
current <- data.frame(C5th=c(17.643981,16.83572,9.979904),
CMean=c(26.66364,19.74286,15.10000),
C95th=c(35.68329,22.64999,20.22010))
future <- data.frame(C5th=c(17.643981,16.83572,9.979904)*2,
CMean=c(26.66364,19.74286,15.10000)*2,
C95th=c(35.68329,22.64999,20.22010)*2)
cf <- data.frame(current, future)
## Define a categorical variable checking the conditions you need
cf$class <- with(cf,
ifelse(C5th > C95th.1, 'A',
ifelse(C95th < C5th.1, 'B',
ifelse(C5th < C95th.1 && C5th > C5th.1, 'C', 'D')
)
)
)
cf$class <- factor(cf$class)
## Build a SPDF object with the coordinates and data
pp <- SpatialPointsDataFrame(cc, cf)
这个对象可以用spplot
显示。有了它你可以选择符号、大小等
levelplot(s) + spplot(pp["class"],
pch = 21:23,
col.regions = 'gray')
我这里有一个棘手的 ifelse
任务。下面是我的代码,显示了两个时期的数据(future
和 current
)。数据在 xy 坐标旁边有 mean, 5th and 95th
个置信区间。我想比较两个 df(future
和 current
)的 mean, 5th and 95th
置信区间(CI)。
条件:
1) 如果 future
的 CIs
与 current
的 CIs
不重叠,并且 future 的 CI 高于当前值,则 pch=2
.
2) 如果 future
的 CIs
不与 current
的 CIs
重叠,并且 future 的 CI 低于当前值,则 pch=3
.
3) 如果未来的 CI 与当前的重叠,则 pch=4
library(raster)
library(rasterVis)
s <- stack(replicate(2, raster(matrix(runif(100), 3))))
current <- data.frame(coordinates(sampleRandom(s, 3, sp=TRUE)),
C5th=c(17.643981,16.83572,9.979904),
CMean=c(26.66364,19.74286,15.10000),C95th=c(35.68329,22.64999,20.22010))
future <- data.frame(coordinates(sampleRandom(s, 3, sp=TRUE)),
C5th=c(17.643981,16.83572,9.979904)*2,
CMean=c(26.66364,19.74286,15.10000)*2,C95th=c(35.68329,22.64999,20.22010)*2)
以上三个conditions
的结果将添加到我的地图中。
类似(只是一次尝试):
levelplot(s, margin=FALSE, at=seq(0, 1, 0.05)) +
layer(sp.points(xy, pch=ifelse(condition, 2, 3,4), cex=2, col=1), columns=1) +
layer(sp.points(xy, pch=ifelse(condition, 2, 3,4), cex=2, col=1), columns=2)
例如下图中,如果NFC的最小值(future
)完全位于AFC的最大值(current
)之上,则条件1.如果NFC的最大值位于完全低于 AFC 的最小值,则条件 1.The 下图满足条件 3.
请帮忙。 AT.
定义一个完整的SpatialPointsDataFrame
对象会更简单
根据定义的附加分类变量
你需要的条件。
library(raster)
library(rasterVis)
s <- stack(replicate(2, raster(matrix(runif(1000), 3))))
## Coordinates
cc <- sampleRandom(s, 3, sp = TRUE)
## Data
current <- data.frame(C5th=c(17.643981,16.83572,9.979904),
CMean=c(26.66364,19.74286,15.10000),
C95th=c(35.68329,22.64999,20.22010))
future <- data.frame(C5th=c(17.643981,16.83572,9.979904)*2,
CMean=c(26.66364,19.74286,15.10000)*2,
C95th=c(35.68329,22.64999,20.22010)*2)
cf <- data.frame(current, future)
## Define a categorical variable checking the conditions you need
cf$class <- with(cf,
ifelse(C5th > C95th.1, 'A',
ifelse(C95th < C5th.1, 'B',
ifelse(C5th < C95th.1 && C5th > C5th.1, 'C', 'D')
)
)
)
cf$class <- factor(cf$class)
## Build a SPDF object with the coordinates and data
pp <- SpatialPointsDataFrame(cc, cf)
这个对象可以用spplot
显示。有了它你可以选择符号、大小等
levelplot(s) + spplot(pp["class"],
pch = 21:23,
col.regions = 'gray')