将 envfit 结果的子集绘制到排序上

Plotting a subset of envfit results onto an ordination

我正在为一份出版物制作一个数字,我们正在研究不同社区的植物覆盖率和其他环境数据的组合。我正在尝试制作一个多面板图,其中的面板显示所有 envfit 结果,一个只显示植物,一个只显示另一个 enviro。由于图的复杂性,实际上在base plot函数中构造比在ggvegan中构造要容易一些。

我的挑战是弄清楚如何为不同的面板对 envfit 分析对象的结果进行子集化。一个简化的例子是:

library(vegan)
data("mite")
data("mite.env")
set.seed(55)
nmds<-metaMDS(mite)
set.seed(55)
ef<-envfit(nmds, mite.env, permu=999)
plot(ef, p.max = .05)

产生这个数字

为了这个例子,有没有人对我可以创建两个单独的图形的方法有建议,一个只有 WatrCont 向量,一个只有 SubsDens 向量?我确信有一种方法可以从 ef 对象中提取特定结果,但我的编码不够精通,无法理解如何操作。 另外,有没有办法让中心的混乱文本不重叠,类似于 ggplot 中的抖动?

感谢大家的帮助!

我建议从 nmdsef 中提取数据并使用 ggplot 将所需元素添加到您的绘图中。

这是一个例子:

library(vegan)
library(ggplot2)
data("mite")
data("mite.env")
set.seed(55)
nmds<-metaMDS(mite)
set.seed(55)
ef<-envfit(nmds, mite.env, permu=999)

# Get the NMDS scores
nmds_values <- as.data.frame(scores(nmds))

# Get the coordinates of the vectors produced for continuous predictors in your envfit
vector_coordinates <- as.data.frame(scores(ef, "vectors")) * ordiArrowMul(ef)

# Plot the vectors separately
ggplot(nmds_values,
       aes(x=NMDS1, y = NMDS2)) +
  geom_point() +
  geom_segment(aes(x=0, y=0, xend=NMDS1, yend=NMDS2),
               vector_coordinates[1,]) +
  geom_text(aes(x=NMDS1,y=NMDS2),
            vector_coordinates[1,],
            label=row.names(vector_coordinates[1,]))

ggplot(nmds_values,
       aes(x=NMDS1, y = NMDS2)) +
  geom_point() +
  geom_segment(aes(x=0, y=0, xend=NMDS1, yend=NMDS2),
               vector_coordinates[2,]) +
  geom_text(aes(x=NMDS1,y=NMDS2),
            vector_coordinates[2,],
            label=row.names(vector_coordinates[2,]))

您可以随意调整不同元素的颜色和大小。可以用类似的方式提取分类预测变量的坐标。