[英]How can I generate a state shapefile and spatial points using levelplot or spplot?
[英]distinguish spatial points by two attributes (via color and symbol) with spplot
比方說,我們感興趣的是比較9個不同品種的植物物種,種植2個扦插字段中的每個人的。 我想繪制整個布局,每次切割一個點,就像我們從上面看到的那樣。 隨着sp
和lattice
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")
當我指定zcol=c("block","category")
,錯誤說: all factors should have identical levels
。
我讀到有關sp.layout
的選項spplot
和par.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.