gpt4 book ai didi

r - 使用 spplot 通过两个属性(通过颜色和符号)区分空间点

转载 作者:行者123 更新时间:2023-12-02 03:10:50 27 4
gpt4 key购买 nike

假设我们有兴趣比较 9 个不同的 cultivars一种植物,通过种植 2 cuttings他们每个人都在一个领域。我想绘制整个布局,每次切割一个点,就好像我们是从上面看田野一样。随着splattice R 包,我知道如何根据一个因素属性使用颜色来区分插条,但我不能成功对另一个因素属性使用符号。

需要更多详细信息才能理解下面的可重现示例。我进一步假设插条被种植在一个有 6 行和 3 列(总共 18 个位置)的规则网格上。田地被分成 2 个区 block ,每个区 block 有 9 个位置,因此每个品种在每个区 block 中只出现一次。所以我想用颜色来区分块(比如,蓝色的 block A和红色的 block B)。此外,这些品种属于两个不同的类别。因此,我也想使用符号来区分类别(例如,圆形和三角形)。

(x <- data.frame(cultivar=rep(paste0("cv", 1:9), 2),
row=rep(11:16, each=3),
column=rep(5:7, 6),
block=rep(c("A","B"), each=9),
category=rep(c(5,5,rep(1,7)), 2)))

这样的data.frame可以转换成空间对象:

library(sp)
x.sp <- SpatialPointsDataFrame(coords=x[,c("column","row")],
data=x[,c("block","category")])
summary(x.sp)

以下是我如何设法区分每种颜色的方 block :

spplot(obj=x.sp, zcol=c("block"),
col.regions=c("blue","red"), key.space="right",
scales=list(draw=TRUE), aspect="fill",
xlab=colnames(coordinates(x.sp))[1],
ylab=colnames(coordinates(x.sp))[2],
main="Layout on the field")

spplot

当我指定 zcol=c("block","category") 时,错误说:all factors should have identical levels .

我读到了 sp.layout spplot 的选项, 和 par.settings xyplot 的选项(由 spplot 调用),但不太了解它们的工作原理。有什么想法吗?

或者您是否知道另一种(简单的)方法可以使用其他包进行此类绘图?

最佳答案

我展示了两种方法,使用 update 和制作额外的因素。

前者:首先,您创建一个具有“ block ”(颜色) 信息的基础对象(它与您上面显示的几乎相同)。其次,您可以使用 update() 添加 "category"(pch) 信息和 legend

后者:基于制作和使用具有所有因子信息的组合因子的思想。

  ## "category" isn't numeric but factor. It would be better to change class.
x$category <- as.factor(x$category)
x.sp <- SpatialPointsDataFrame(coords=x[,c("column","row")], data=x[,c("block","category")])

## make a base graph ("block")
p <- spplot(obj = x.sp, zcol = c("block"),
col.regions = c("blue","red"), key.space = "none", # <- modify not to make legend
scales = list(draw=TRUE), aspect = "fill",
xlab = colnames(coordinates(x.sp))[1],
ylab = colnames(coordinates(x.sp))[2],
main = "Layout on the field")

## add "category" information and legend
p <- update(p, pch = c(16, 17)[x.sp$category],
key = list(right = list(fun = lattice::draw.key),
points = list(col = c("blue", "red", 1, 1), pch = c(15, 15, 1, 2)),
text = list(c(levels(x.sp$block), levels(x.sp$category))),
space = 'right', columns = 1))
p

enter image description here

后一种方法(使用组合因子)

x.sp2 <- SpatialPointsDataFrame(coords=x[,c("column","row")], 
data=cbind(x[,c("block","category")], comb = paste0(x$block, x$category)))

spplot(x.sp2, "comb", col.regions = rep(c("red", "blue"), each = 2), pch = rep(c(16, 17), 2),
scales=list(draw=TRUE), aspect="fill", key.space = "right",
xlab=colnames(coordinates(x.sp))[1],
ylab=colnames(coordinates(x.sp))[2],
main="Layout on the field")

关于r - 使用 spplot 通过两个属性(通过颜色和符号)区分空间点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40135159/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com