Как изобразить участки в разных цветах на графике NMDS в R (веганский пакет)? - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть данные с пастбищных угодий (сайты 1-14) и карьеров (сайты 15-28), и я хочу, чтобы они имели разную окраску на моем графике NMDS, который я создал с помощью пакета vegan, например, номера сайтов 1-14 в красноми 15-28 синим цветом.

Я новичок в R и не знаком с редактированием графики.

vare.mds <- metaMDS(species, trace=FALSE)
plot(vare.mds, type = "n")
text(vare.mds, display = "sites")

1 Ответ

0 голосов
/ 05 февраля 2019

Если предположить, что выборки находятся в указанном вами порядке (строки 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')

, который производит

enter image description here

...