R 使用ggplot在MDS上绘制向量

R 使用ggplot在MDS上绘制向量,r,ggplot2,vegan,mds,R,Ggplot2,Vegan,Mds,我需要绘制一个MDS,用向量显示我的物种的丰富变化。 我需要一个只有向量的图 这是我的每种物种和代码的丰富数据 library(vegan) A <- c(54.67, 37.67, 19.33, 0, 6, 8, 84.67, 0,0,0,0,0,0,0) B <- c(3.67, 10.33, 32.67, 5.33, 20.33, 5.33, 4.67, 3, 4, 0.01, 0.1, 0, 5, 0) C <- c(10, 1.67, 2.67, 1.67, 11.

我需要绘制一个MDS,用向量显示我的物种的丰富变化。 我需要一个只有向量的图

这是我的每种物种和代码的丰富数据

library(vegan)

A <- c(54.67, 37.67, 19.33, 0, 6, 8, 84.67, 0,0,0,0,0,0,0)
B <- c(3.67, 10.33, 32.67, 5.33, 20.33, 5.33, 4.67, 3, 4, 0.01, 0.1, 0, 5, 0)
C <- c(10, 1.67, 2.67, 1.67, 11.33, 1.33, 1, 2, 2.77, 0, 0.02, 1,3,0)
D <- c(1,10.33, 2.33, 28.33, 29.33, 4.33, 21, 6.97, 4.47, 0, 0.16, 11, 4,0)
df <- cbind(A, B, C, D)
row.names(df) <- c('B_2016', 'Emb_2016', 'Fes_2016', 'Ku_2016', 'Ra_2016', 'Ud_2016',
                   'Ve_2016', 'Ba_2017', 'Emb_2017', 'Fes_2017', 'Ku_2017', 'Ra_2017', 
                   'Ud_2017', 'Ve_2017')

mds <- metaMDS(df, distance='bray')
library(素食主义者)

A根据您的代码,我不确定您的目标是什么,但以下是一些您可能需要注意的事项

第1点:不要将任何内容放入顶层
ggplot()
调用,除非您希望后续层继承它。

而不是:

g <- ggplot(data = mds, aes(MDS1, MDS2)) + 
这告诉ggplot,对于打印标签,它应该查看
mdspoints
数据框,并搜索名为
MDS1
/
MDS2
/
物种的变量


这是从
mdspoints创建的,呃,你得到的错误是相关的。我如何才能创建正确的绘图?嗯,我首先要解释一下你之前所说的错误。在NMDS中用一个来自原点的向量来显示物种没有多大意义,因为它们是用加权平均值计算的。你的图表显示的东西与你所说的完全不同。您的代码尝试绘制从原点到物种点的箭头(您不应该像@RichardTelford告诉您的那样),但图表显示了来自不同点的箭头。你喜欢展示什么?点或距离和方向从原点的变化?另一个奇妙的,全面的林志强回答:)在排序图中,你应该总是有相等的长宽比。您可以通过在图形中添加
+coord_equal()
+coord_fixed()
来实现此目的。当你这样做时,你会发现你的图形中只有一个实轴,箭头没有什么意义(似乎NMDS2显示了输入数据中的舍入错误)。@JariOksanen谢谢,那么,我应该使用什么代码呢?我需要创建箭头,连接每个位置的2016–2017年数据点对,以显示我的站点上物种A-B-C-D组成的变化
g <- ggplot(data = mds, aes(MDS1, MDS2)) + 
  geom_segment(data = mdsvectors, aes(x=0, xend=MDS1, y=0, yend=MDS2),
               arrow = arrow(length = unit(0.5, "cm")),
               colour="grey", inherit_aes = FALSE) + 
  geom_text(data=mdspoints, aes(x=MDS1, y=MDS2, label=species), size=5)
g <- ggplot(data = mds, aes(MDS1, MDS2)) + 
g <- ggplot() + 
  geom_text(data=mdspoints, aes(x=MDS1, y=MDS2, label=species), size=5)
> mdspoints
             NMDS1         NMDS2
B_2016   -141.6526 -6.290613e-01
Emb_2016 -141.8424 -3.280861e-01
Fes_2016 -142.1144 -4.456856e-01
Ku_2016  -141.8335  3.674413e-01
Ra_2016  -141.8977  2.283486e-02
Ud_2016  -141.8824 -1.480702e-01
Ve_2016  -141.5302 -3.732303e-01
Ba_2017  -141.9265  2.233302e-01
Emb_2017 -141.9695  1.210940e-01
Fes_2017 -140.6462  1.430899e-01
Ku_2017  -141.8616  2.216499e-01
Ra_2017  -141.7638  7.116520e-01
Ud_2017  -142.0109  1.130730e-01
Ve_2017  1842.9317 -3.167902e-05
## Default S3 method:
scores(x, choices, display=c("sites", "species"), ...)
mdspoints <- data.frame(scores(mds, "species"))
mdspoints$species <- row.names(mdspoints)
ggplot() + 
  geom_segment(data = mdsvectors, aes(x=0, xend=MDS1, y=0, yend=MDS2),
               arrow = arrow(length = unit(0.5, "cm")),
               colour="grey") +
  geom_text(data=mdspoints, aes(x=NMDS1, y=NMDS2, label=species), size=5) +
  labs(x = "NMDS1", y = "NMDS2") + # add axis labels
  theme_classic()                  # use a white theme for better contrast