簡體   English   中英

使用spplot通過兩個屬性(通過顏色和符號)區分空間點

[英]distinguish spatial points by two attributes (via color and symbol) with spplot

比方說,我們感興趣的是比較9個不同品種的植物物種,種植2個扦插字段中的每個人的。 我想繪制整個布局,每次切割一個點,就像我們從上面看到的那樣。 隨着splattice R封裝,我知道如何使用的顏色,根據一個因素的屬性來區分扦插,但我不能成功地也在使用符號的另一個因素屬性。

需要更多細節來理解下面的可再現的例子。 我進一步假設切割種植在具有6行和3列(總共18個位置)的規則網格上。 該田地被分成2個區塊,每個區塊有9個位置,因此每個區域中每個栽培品種只出現一次。 所以我想使用顏色來區分塊 (例如,塊A為藍色,塊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)

以下是我如何區分每種顏色的塊:

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的選項spplotpar.settings的選項xyplot (由稱為spplot ),但不太了解他們的工作。 任何想法?

或者你知道另一種(簡單的)方法與其他包做這樣的情節嗎?

我展示了兩種方法,使用update和制作附加因素。

前者 :首先,您創建一個具有"block" (color)信息的基礎對象(它與您上面顯示的幾乎相同)。 其次,您可以使用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

在此輸入圖像描述

后一種方法 (使用因子的組合)

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

暫無
暫無

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

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