Plotting envfit vectors (vegan package) in ggplot2

后端 未结 4 2059
南旧
南旧 2020-12-09 05:45

I am working on finalizing a NMDS plot that I created in vegan and ggplot2 but cannot figure out how to add envfit species-loading vectors to the plot. When I try to it says

4条回答
  •  既然无缘
    2020-12-09 06:21

    Start with adding libraries. Additionally library grid is necessary.

    library(ggplot2)
    library(vegan)
    library(grid)
    data(dune)
    

    Do metaMDS analysis and save results in data frame.

    NMDS.log<-log(dune+1)
    sol <- metaMDS(NMDS.log)
    
    NMDS = data.frame(MDS1 = sol$points[,1], MDS2 = sol$points[,2])
    

    Add species loadings and save them as data frame. Directions of arrows cosines are stored in list vectors and matrix arrows. To get coordinates of the arrows those direction values should be multiplied by square root of r2 values that are stored in vectors$r. More straight forward way is to use function scores() as provided in answer of @Gavin Simpson. Then add new column containing species names.

    vec.sp<-envfit(sol$points, NMDS.log, perm=1000)
    vec.sp.df<-as.data.frame(vec.sp$vectors$arrows*sqrt(vec.sp$vectors$r))
    vec.sp.df$species<-rownames(vec.sp.df)
    

    Arrows are added with geom_segment() and species names with geom_text(). For both tasks data frame vec.sp.df is used.

    ggplot(data = NMDS, aes(MDS1, MDS2)) + 
      geom_point(aes(data = MyMeta, color = MyMeta$amt))+
      geom_segment(data=vec.sp.df,aes(x=0,xend=MDS1,y=0,yend=MDS2),
          arrow = arrow(length = unit(0.5, "cm")),colour="grey",inherit_aes=FALSE) + 
      geom_text(data=vec.sp.df,aes(x=MDS1,y=MDS2,label=species),size=5)+
      coord_fixed()
    

    enter image description here

提交回复
热议问题