假设样本按照您指定的顺序(第 1-14 行是草地,第 15-28 行是采石场),那么在基本图形中执行此操作的最简单方法是创建所需长度的因子变量:
grp <- factor(rep(c('grassland', 'quarry'), each = 14))
然后为两组创建一个颜色向量
cols <- c('red','black')
然后您可以使用col 参数为text() 调用创建的文本着色,该参数通常可用于大多数基本图形绘图函数。
要查看实际执行绘图时会发生什么,我们要做的是使用包含组成员资格的因子 grp 索引颜色向量 cols:
> cols[grp]
[1] "red" "red" "red" "red" "red" "red" "red" "red" "red"
[10] "red" "red" "red" "red" "red" "black" "black" "black" "black"
[19] "black" "black" "black" "black" "black" "black" "black" "black" "black"
[28] "black"
grp 存储为数值向量,其元素索引每个观察的级别:
> as.numeric(grp)
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2
因此,在cols[grp] 中,grp 成为一个数字向量,分别索引第一种或第二种颜色,并根据您的每个网站的需要。
所以,text() 将如下所示:
text(vare.mds, display = "sites", col = cols[grp])
在你的情况下,简单地调用也足够了
text(vare.mds, display = "sites", col = rep(cols, each = 14))
因为这些组被安排在连续的样本块中,但如果不是这种情况(如果您忘记以相同的方式对关联数据集进行排序,那么重新排序不一定是一件好事)那么我上面描述的方法是有益的.
为了制作一个可直接重现的示例,以下是 vegan
提供的
varespec 数据集的全部内容
library('vegan')
data(varespec)
## varespec has on 24 observations so 1-12 will be grassland and 13-24 quarry
grp <- factor(rep(c('grassland', 'quarry'), each = 12))
## vector of colours
cols <- c('red', 'black')
set.seed(1)
ord <- metaMDS(varespec, trace=FALSE)
plot(ord, type = 'n')
text(ord, display = 'sites', col = cols[grp])
legend('bottomright', legend = tools::toTitleCase(levels(grp)),
fill = cols, bty = 'n')
产生