Если предположить, что выборки находятся в указанном вами порядке (строки 1–14 - луга, строки 15–28 - карьер), то простейший способ сделать это в базовой графике - создать факторную переменную необходимой длины:
grp <- factor(rep(c('grassland', 'quarry'), each = 14))
Затем создайте вектор цветов для двух групп
cols <- c('red','black')
Затем вы можете раскрасить текст, созданный вызовом text()
, используя аргумент col
, которыйобычно доступны для большинства базовых графических функций построения графиков.
Чтобы увидеть, что произойдет, когда вы на самом деле создадите график, мы собираемся индексировать цветовой вектор cols
, используя grp
фактор, содержащий группучленство:
> 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))
, потому что группы расположены в непрерывных блоках выборок, но если это не так (и прибегание к ним не обязательно хорошо, если вы забудете отсортироватьаналогично связанным наборам данных), то метод, который я описал выше, является полезным.
Чтобы сделать непосредственно воспроизводимый пример, вот полная вещь, проработанная для набора данных varespec
, предоставляемого с vegan
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')
, который производит
