设置如下:森林中20 x 20 m样方内有10棵树。对于每棵树,我们使用x,y坐标知道物种,直径(以cm为单位)和样方内的位置。
使用此数据作为示例:
tag <- as.character(c(1,2,3,4,5,6,7,8,9,10))
species <- c("A","A","A","A","B","B","B","C","C","D")
diameter <- c(50,20,55,30,30,45,15,20,35,45)
x <- c(9,4,5,14,8,19,9,12,10,2)
y <- c(6,7,15,16,12,4,19,2,14,9)
df <- data.frame(tag, species, diameter, x, y)
首先我创建点模式
species_map <- ppp(df$x, df$y, c(0,20), c(0,20))
然后我标记物种和直径
marks(species_map) <- data.frame(m1 = df$species, m2=(df$diameter))
现在我可以绘制点图案,并且由于直径上的标记,每个点都可以缩放。 “markscale”位设置为0.01,因为diamter测量值以cm为单位,quadrat尺寸以米为单位定义。
plot(species_map, which.marks=2, markscale=.01)
现在我想让不同种类的圈子变成不同的颜色,但这就是我被困住的地方。
如果我尝试制作包含我的两个标记的图,我只得到2个单独的图,其中一个使用不同大小的点来表示直径(正确),一个使用不同的字符来表示不同的物种。
plot(species_map, which.marks= c(1,2), markscale=.01)
如何使用相同字符的不同颜色来表示不同物种的情节,同时还要绘制按比例绘制的点?
我怎样才能让它产生一个单一的情节?
提前谢谢。
杰
答案 0 :(得分:1)
奇怪的是,我无法想到一个非常优雅的方式来做到这一点。我的 最好的办法是按物种将数据分成不同的点模式 并循环通过物种和情节。这对你来说够了吗?
library(spatstat)
tag <- as.character(c(1,2,3,4,5,6,7,8,9,10))
species <- c("A","A","A","A","B","B","B","C","C","D")
diameter <- c(50,20,55,30,30,45,15,20,35,45)
x <- c(9,4,5,14,8,19,9,12,10,2)
y <- c(6,7,15,16,12,4,19,2,14,9)
df <- data.frame(tag, species, diameter, x, y)
species_map <- ppp(df$x, df$y, c(0,20), c(0,20))
marks(species_map) <- data.frame(m1 = df$species, m2=(df$diameter))
您需要选择四种颜色并固定相同的直径范围
每个情节和做循环(argumet bg
传递给symbols
和
用这种颜色填充圆圈的背景:
diamrange <- range(diameter)
cols <- c("black", "red", "green", "blue")
species_map_split <- split(species_map, reduce = TRUE)
plot(species_map_split[[1]], markrange = diamrange, markscale=.01,
main = "", cols = cols[1], bg = cols[1])
#> Warning: Interpretation of arguments maxsize and markscale has changed (in
#> spatstat version 1.37-0 and later). Size of a circle is now measured by its
#> diameter.
for(i in 2:4){
plot(species_map_split[[i]], markrange = diamrange, markscale=.01,
add = TRUE, col = cols[i], bg = cols[i])
}
答案 1 :(得分:1)
spatstat
尚未实现多列标记的符号映射。所以你需要像Ege所做的那样做。