Это не просто. Вы получаете ошибку, потому что select не является параметром для графика. К сожалению, результатом анализа является не data.frame, который может быть легко обработан (например, с помощью tidyverse), и, к сожалению, вызываемая функция plot () - это не стандартный график, а метод, определенный специально для объектов этого типа. учебный класс. Авторы этого метода не предусмотрели вашу потребность, и поэтому мы должны сделать сюжет вручную. Но для этого нам нужно понять, что такое заговор и как.
Давайте узнаем больше об объекте sol
:
class(sol)
# [1] "metaMDS" "monoMDS"
methods(class="metaMDS")
# [1] goodness nobs plot points print scores sppscores<- text
О, хорошо, у нас есть метод заговора. После момента копания мы находим его в пакете vegan
(не экспортируется, поэтому нам нужно получить к нему доступ через vegan:::plot.metaMDS
). Похоже, что это обертка вокруг функции с именем ordiplot
. Мы редактируем функцию с помощью edit()
, чтобы выяснить, что она делает. По сути, это сводится к следующему (с загрузкой ненужного кода):
Y <- scores(sol, display="species")
plot(Y, type="n")
text(Y[,1], Y[,2], rownames(Y), col="red")
Это более или менее ваш сюжет. Выбор вида для показа теперь тривиален, но сначала мы должны убедиться, что строки Y расположены в том же порядке, что и столбцы дюны:
all(colnames(dune) == rownames(Y))
Y.sel <- Y[colSums(dune) > 40, ]
plot(Y.sel[,1], Y.sel[,2], type="n", xlim=c(-.8, .8), ylim=c(-.4, .4))
text(Y.sel[,1], Y.sel[,2], rownames(Y.sel), col="red")
Конечно, мы можем сделать намного более приятный сюжет. Например, с помощью ggplot (безусловно, можно создать гораздо более хороший график с основанием R). Мы могли бы показать обилие растений, используя эстетику размера:
library(ggplot2)
library(ggrepel)
Y <- data.frame(Y)
Y$abundance <- colSums(dune)
Y$labels <- rownames(Y)
ggplot(Y, aes(x=NMDS1, y=NMDS2, size=abundance)) +
geom_point() + geom_text_repel(aes(label=labels)) +
theme_minimal()
Чтобы отфильтровать виды по численности, теперь мы можем сделать следующее:
library(tidyverse)
Y %>% filter(abundance > 40) %>%
ggplot(Y, aes(x=NMDS1, y=NMDS2, size=abundance)) +
geom_point() + geom_text_repel(aes(label=labels)) +
theme_minimal()