假设我们有兴趣比较9种不同的cultivars植物物种,通过在田地中种植2 cuttings种植物。我想绘制整个布局,每次切割一个点,就像我们从上面看到的那样。使用zip
和sum
R包,我知道如何根据一个因素属性使用颜色来区分切割,但是我无法在中使用符号成功因素属性。
需要更多细节来理解下面的可重复示例。我进一步假设切割种植在具有6行和3列(总共18个位置)的规则网格上。该田地被分成2个区块,每个区块有9个位置,因此每个区域中每个栽培品种只出现一次。所以我想使用颜色来区分块(例如,块A为蓝色,块B为红色)。此外,品种属于两个不同的类别。因此,我也希望使用符号来区分类别(例如,圆圈和三角形)。
len
这样的data.frame可以转换为空间对象:
sp
以下是我如何区分每种颜色的块:
lattice
当我指定(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)))
时,错误显示为:library(sp)
x.sp <- SpatialPointsDataFrame(coords=x[,c("column","row")],
data=x[,c("block","category")])
summary(x.sp)
。
我读到了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")
的{{1}}选项以及zcol=c("block","category")
的{{1}}选项(由all factors should have identical levels
调用),但不太明白他们如何工作。有什么想法吗?
或者您知道另一种(简单)方法与其他包一起制作这样的情节吗?
答案 0 :(得分:1)
我展示了两种方法,使用update
并制作其他因素。
前者:首先,您创建一个具有"block" (color)
信息的基础对象(它与您上面显示的内容几乎相同)。其次,您可以使用"category" (pch)
添加legend
信息和update()
。
后者:它基于制作和使用具有所有因子信息的组合因子的想法。
## "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
后一种方法(使用因子组合)
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")