R:根据循环在ggplot2中绘制箭头

时间:2017-09-20 10:27:12

标签: r plot ggplot2 vegan arrows

我有一个数据集如下:

i <- data.scores
i
               NMDS1         NMDS2
Plot_1_O  -0.1716069847  -1.177471624
Plot_2_O  -0.2452065424  -0.978276228
Plot_3_O   0.3885298355  -0.578810975
   ...         ...            ...
Plot_64_O  0.7976712787  -0.187241724
Plot_1_N  -0.4044221768  -0.239157686
Plot_2_N   0.2539782304   0.197509348
Plot_3_N   0.3163483600  -0.130876763
   ...         ...            ...
Plot_64_N  0.6346501475   0.265873211

正如您(可能会或可能不会)看到的那样,它是在64个不同图上的植被图 - 数据,在几个时间点拍摄(因此“旧”和“新”的“O”/“N”)。我通过vegan的{​​{1}}运行了一个NMDS,并得到了一个显示我的结果的图表。我还通过metaMDS()和相关的环境数据计算了拟合度。完成的情节很好,但我想在旧的和新的调查数据对之间添加箭头。我用循环来做到这一点:

env_fit()

结果情节如下所示:NMDS-Plot 黑色符号分别显示旧图,红色符号表示新图。 为了更好的美学,我重新绘制了for (j in 1:64){ k <- j+64 arrows(data.scores$NMDS1[j], data.scores$NMDS2[j], data.scores$NMDS1[k], data.scores$NMDS2[k], length = 0.1, lwd=2) } 中的情节,一切都很好,直到我不得不再画那些箭。我不能在ggplot2命令中使用循环,我不知道如何同时绘制所有这些箭头。我试过这样的事情:

ggplot2

但它根本没有绘制任何箭头,甚至没有任何箭头。删除列规范也没有帮助,我怀疑我会立刻获得所有相应的箭头。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案:根据我最后一行代码,我尝试绘制箭头geom_segment(data=i, aes(x=i$NMDS1[1:64], xend=i$NMDS1[65:128], y=i$NMDS2[1:64], yend=i$NMDS2[65:128]), arrow = arrow(length = unit(0.5, "cm")), colour="red", inherit.aes=FALSE, lwd=2)我将绘图保存为一个名为“Plot_Final”的对象并尝试了这个:

for (j in 1:64){ #j=1
  k <- j+64
  Plot_Final <- Plot_Final + geom_segment(data=i, x=i$NMDS1[j], xend=i$NMDS1[k], y=i$NMDS2[j], yend=i$NMDS2[k], arrow = arrow(length = unit(0.3, "cm")), colour="black", inherit.aes=FALSE, lwd=0.1)
}

通过删除aes() - 参数,我终于让我的箭头指出我的ggplot2 - 情节中的情节对。不管怎样,谢谢你!